2010-05-21 5 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 

, 나는 user.id에 의해 GROUP을 사용하지만, 그것은 단지 하나의 답을 반환합니다.

내가 모든 사용자가이 목록 같은 것을 반환 할이 답 :

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

+0

내 게시물을 업데이트하여 스키마를 업로드했습니다. 의미가 있습니다. – text

답변

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을 사용했기 때문에 사용자가 th 문제가된다면 아무 것도 아프지 않을 것입니다. 또한 여러 개의 답변이있는 경우 GROUP_CONCAT이 자동으로 필드를 결합합니다. 특정 사용자에 대해 Q1에서 2 행이 있으면 두 개를 "ans1, ans2"로 결합합니다 ...

+0

GROUP_CONCAT, nice - 그 기능에 대해 몰랐습니다. –