Mamy tabelę, której używamy do przechowywania odpowiedzi na pytania. Musimy być w stanie znaleźć użytkowników, którzy mają określone odpowiedzi na określone pytania. Jeśli więc nasza tabela składa się z następujących danych:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
i chcemy znaleźć użytkowników, którzy odpowiedzą na „Pooch” w przypadku pytania 1 i „Peach” w przypadku pytania 2, następujący kod SQL (oczywiście) nie będzie działać:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Moją pierwszą myślą było przyłączyć się do stołu dla każdej szukanej odpowiedzi:
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'
Działa to, ale ponieważ zezwalamy na dowolną liczbę filtrów wyszukiwania, musimy znaleźć coś znacznie wydajniejszego. Moje następne rozwiązanie wyglądało mniej więcej tak:
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
Chcemy jednak, aby użytkownicy mogli dwa razy wypełnić ten sam kwestionariusz, aby potencjalnie mieli dwie odpowiedzi na pytanie 1 w tabeli odpowiedzi.
Więc teraz jestem zagubiony. Jak najlepiej to podejść? Dzięki!