Soru ve cevaplar ile çoklu bir anket temsil eden iki tablo için bir sorgu nasıl kullanılır?

2 Cevap php

Ben anket bir soruyu cevaplamak için seçim için anket ve seçenekleri temsil eden iki tablo poll ve poll_answers, var. EX:

Ben SQL emmek MUSUNUZ?

  • evet
  • evet, you do
  • zanaat değiştirmek

ve co-yanıt tabloları:

poll

pollID pollQuestion

1 | Ben Sql emmek MUSUNUZ?


poll_answers

pollAnswerID pollAnswerText pollID

1 | evet | 1

2 | evet, do | 1

3 | değişiklik zanaat | 1


ve bu verileri almak nasıl:

$polls=$db->get_results("SELECT pollID, pollQuestion FROM poll",ARRAY_A);
    foreach ($polls as $poll_field)
    {
    	$poll['id']=$poll_field['pollID'];
    	$poll['question']=$poll_field['pollQuestion'];
    	$tmp=$poll['id'];
    	//answers
    	$answers=$db->get_results("SELECT pollAnswerID, pollAnswerText FROM poll_answers WHERE pollID='$tmp'",ARRAY_A);
            {
            //and so on , I think you get the idea.
            }


    }

Ben İÇ kimlik maç JOIN kullanarak sadece tek bir SQL sorgusu ile veri elde etmenin mümkün olduğunu düşünüyorum benim için çok hantal görünüyor ... Ben sadece bunu yapamadık. Size yardım edebilir miyim? Birden anketler benim veritabanında olduğunu aklınızda bulundurun. Teşekkür ederim.


Edit: kadar cevaplar için teşekkür ederim. Ben yardım için teşekkür ederiz. Ama ben de soruyu açıklamak vermedi. Sadece bir SEÇİMİ kullanarak bir dizi veya nesne tüm cevapları ile tüm anketlerde almak mümkün mü. Cevaplarda kadar siz zaten bir önceki sorgudan alınır $ tmp değişkeni kullanın. Peki bunu yapmak mümkün ya da bana cevap almak değil mi?

2 Cevap

SELECT pollQuestion, pollAnswerID, pollAnswerText
FROM   poll_answers pa, poll p
WHERE  p.pollID='$tmp'
       AND pa.pollId = p.pollID

ya, sen INNER JOIN sözdizimi tercih ederseniz,

SELECT pollQuestion, pollAnswerID, pollAnswerText
FROM   poll p
INNER JOIN
       poll_answers pa
ON     pa.pollId = p.pollID
WHERE  p.pollID='$tmp'

Dizideki eveything almak için kullanın:

SELECT  -1, pollQuestion
FROM    poll p
WHERE   p.pollID = @pollID
UNION ALL
SELECT  pollAnswerID, pollAnswerText
FROM    poll_answers pa
WHERE   pa.pollID= @pollID

Tüm anketler için tüm yanıtları istiyorsun? Sadece pollID kısıtlamayı kaldırın:

SELECT p.pollID p.pollQuestion, pa.pollAnswerID, pa.pollAnswerText FROM poll p, poll_answers pa WHERE pa.pollID = p.pollID