запрос для получения нескольких строк с групповым соединением или без него

У меня есть следующая структура таблицы:

 users:
    id PK
    username
    email
    salt
    password
    date_created

questions:
    id PK
    user_id FK(users)
    title
    date_created
    date_updated

answers:
    id PK
    question_id FK(questions)
    user_id FK(users)
    body
    date_created

Поэтому мне нужен запрос, который получает данные из этих таблиц и отображает последние 5 вопросов пользователя и для каждого вопроса первые 3 ответа. Что-то вроде этого:

"What is my favorite color? posted by user

red - posted by user1
green - posted by user2
yellow - posted by user3

.....
"

Так что это дисплей, к которому я стремлюсь. Как я могу сделать это в 1 запрос? Должен ли я использовать group concat для группировки нескольких ответов на 1 вопрос? Или я должен получить результаты и проанализировать массив в PHP, чтобы сгруппировать ответы по question_id. Также мне нужно, чтобы этот запрос был очень быстрым. Я не уверен, будет ли быстрее делать 1 запрос или делать несколько запросов, которые задают вопросы пользователя, а затем отвечают на вопрос.


person Mythriel    schedule 16.07.2012    source источник
comment
Опубликовано с тегом homework. Смелый - и похвальный!   -  person Fluffeh    schedule 16.07.2012
comment
Используйте select-order by-limit. См. stackoverflow. com/questions/11486777/ для идей   -  person Dmitry Osinovskiy    schedule 16.07.2012
comment
те же данные выборки (предпочтительнее sqlfiddle)   -  person Praveen Prasannan    schedule 04.08.2013


Ответы (1)


Я думаю, что ключевой «подсказкой», которую я бы дал, является то, что вы можете использовать обычный CONCAT() внутри GROUP_CONCAT(); а затем используйте JOIN и, возможно, некоторые из методов, упомянутых в комментариях, чтобы получить промежуточный набор результатов, который необходим этим двум функциям для получения вашего результата.

person Chris Trahey    schedule 16.07.2012