Soruların cevaplarını saklamak için kullandığımız bir tablo var. Belirli sorulara belirli cevapları olan kullanıcıları bulabilmeliyiz. Tablonuz aşağıdaki verilerden oluşuyorsa:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
ve soru 1 için 'Pooch' ve soru 2 için 'Peach' yanıtlayan kullanıcıları bulmak istiyoruz, aşağıdaki SQL (açıkçası) çalışmaz:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
İlk düşüncem, aradığımız her cevap için masaya kendi kendine katılmaktı:
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'
Bu işe yarıyor, ancak rastgele sayıda arama filtresine izin verdiğimiz için, çok daha verimli bir şey bulmamız gerekiyor. Bir sonraki çözümüm şöyleydi:
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
Ancak, kullanıcıların aynı anketi iki kez alabilmelerini istiyoruz.
Şimdi kaybettim. Buna yaklaşmanın en iyi yolu nedir? Teşekkürler!