2010-05-21 3 views
1

Я делаю запрос с тремя таблицами, проблема была в одной таблице, имеет много вхождений идентификатора другого.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

+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 автоматически объединяет это поле, если существует несколько ответов. Так что если есть 2 строки из Q1 для этого конкретного пользователя, он будет комбинировать эти два в «ans1, ans2» ...

+0

GROUP_CONCAT, хорошо - я не знал об этой функции. –

Смежные вопросы