Nous avons un tableau que nous utilisons pour stocker les réponses aux questions. Nous devons être en mesure de trouver des utilisateurs qui ont certaines réponses à des questions particulières. Donc, si notre tableau comprend les données suivantes:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
et nous voulons trouver des utilisateurs qui répondent «Pooch» pour la question 1 et «Peach» pour la question 2, le SQL suivant ne fonctionnera (évidemment) pas:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Ma première pensée a été de me joindre à la table pour chaque réponse que nous recherchons:
select a.user_id
from answers a, answers b
where a.user_id = b.user_id
and a.question_id=1
and a.answer_value = 'Pooch'
and b.question_id=2
and b.answer_value='Peach'
Cela fonctionne, mais comme nous autorisons un nombre arbitraire de filtres de recherche, nous devons trouver quelque chose de beaucoup plus efficace. Ma prochaine solution était quelque chose comme ceci:
select user_id, count(question_id)
from answers
where (
(question_id=2 and answer_value = 'Peach')
or (question_id=1 and answer_value = 'Pooch')
)
group by user_id
having count(question_id)>1
Cependant, nous voulons que les utilisateurs puissent répondre deux fois au même questionnaire, afin qu'ils puissent potentiellement avoir deux réponses à la question 1 dans le tableau des réponses.
Donc, maintenant je suis perdu. Quelle est la meilleure façon d'aborder cela? Merci!