MySQL üç tabloyu birleştirmek

1 Cevap php

Ben üç tablo ile bir sorgu yapıyorum, sorun bir tablo başka kimlikli birçok oluşumları vardır oldu.

Örnek veriler:

users: id

answers: 
id:1
user_answer :1
id:1
user_answer :2
id:1
user_answer :3

Questions: 
id:1
answers :answer description
id:2
answers :answer description
id:3
answers :answer description

Ben tüm kullanıcı bilgileri ve tüm cevabını ve açıklamasını nasıl alabilirim, ben user.id tarafından GRUBU kullanılan ancak yalnızca tek bir yanıt verir.

Ben tüm kullanıcılar cevap bu liste gibi bir şey dönmek istiyorum:

Name         Q1          Q2    
USERNAME    ans1,ans2    ans1,ans2             comma separated description of answer here

alt text

1 Cevap

Sen bir özet tablo kullanmak gerekiyordu

SELECT users.id, users.name, 
    GROUP_CONCAT(q1.answer SEPARATOR ', ') AS `Q1`, 
    GROUP_CONCAT(q2.answer SEPARATOR ', ') AS `Q2`, 
    GROUP_CONCAT(q3.answer SEPARATOR ', ') AS `Q3`
FROM `users` AS users,
    LEFT JOIN `answers` AS a1 ON a1.id = users.id
    LEFT JOIN `questions` AS q1 ON q2.id = a1.user_answer
    LEFT JOIN `answers` AS a2 ON a2.id = users.id
    LEFT JOIN `questions` AS q2 ON q2.id = a2.user_answer
    LEFT JOIN `answers` AS a3 ON a3.id = users.id
    LEFT JOIN `questions` AS q3 ON q3.id = a3.user_answer
WHERE q1.question_id = 1
    AND q2.question_id = 2
    AND q3.question_id = 3
GROUP BY users.id

Yani (Ben question_id kısmında tahmin neden olan, onu tam şüpheliyim. Ben SOL kullanılan JOIN size sağlanan şemasından ne yapmak istediğinizi en iyi benim tahminim böylece kullanıcı bu soruya bir cevap yoksa, o şey zarar vermez. birden fazla cevap varsa Ayrıca, GROUP_CONCAT otomatik alanını birleştirmek olacaktır. ki belirli bir kullanıcı için Q1 2 satır varsa, bu "ans1, ans2" içine iki birleştirmek olacak So ...