Wir haben eine Tabelle, in der wir Antworten auf Fragen speichern. Wir müssen in der Lage sein, Benutzer zu finden, die bestimmte Antworten auf bestimmte Fragen haben. Also, wenn unsere Tabelle aus folgenden Daten besteht:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
und wir möchten Benutzer finden, die 'Pooch' für Frage 1 und 'Peach' für Frage 2 beantworten. Die folgende SQL wird (offensichtlich) nicht funktionieren:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Mein erster Gedanke war, mich für jede Antwort, die wir suchen, selbst an den Tisch zu setzen:
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'
Dies funktioniert, aber da wir eine beliebige Anzahl von Suchfiltern zulassen, müssen wir etwas effizienteres finden. Meine nächste Lösung war ungefähr so:
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
Wir möchten jedoch, dass Benutzer denselben Fragebogen zweimal beantworten können, damit sie möglicherweise zwei Antworten auf Frage 1 in der Antworttabelle haben.
Also, jetzt bin ich ratlos. Wie kann man das am besten angehen? Vielen Dank!