2010-05-21 100 views
1

我正在做一個包含三個表的查詢,問題是一個表中有多個id出現在另一個表中。MySQL加入三張表

樣本數據:

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 

我怎樣才能得到所有用戶信息和所有的答案,它的描述,我使用GROUP由user.id但它只返回只有一個答案。

我想回到這樣的事情列表中的所有用戶的回答:

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

alt text http://christianruado.comuf.com/images/schema.png

+0

您能否提供一些更詳細的數據庫模式,包括關係? – Paul 2010-05-21 12:45:05

+0

我更新了我的帖子以上傳模式,這是否有意義。 – text 2010-05-21 15:37:57

回答

1

你需要使用數據透視表

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 

這是我最好的猜測你想從你提供的模式中做什麼(我懷疑它是完整的,這就是爲什麼我猜測在question_id部分。我使用了LEFT JOIN,所以如果用戶沒有答案在問題上,它不會傷害任何東西。另外,如果存在多個答案,GROUP_CONCAT將自動組合該字段。因此,如果Q1中有兩行代表該特定用戶,它會將兩者合併爲「ans1,ans2」...

+0

GROUP_CONCAT,很好 - 我不知道那個功能。 – 2010-05-21 14:27:20