У меня есть 2 таблицы:
Таблица вопросов со следующей структурой:
id
title
userid
date
и отвечает таблице со следующей структурой:
id
idquestion
userid
message
date
Я хочу показать все вопросы и последний ответ на этот вопрос.
Например, если у нас есть 5 вопросов, я хотел бы получить что-то вроде этого:
id title message messagedate
1 qs 1 mess 1 2010-11-18
2 qs 2 mess 2 2010-11-19
3 qs 3 mess 3 2010-11-20
4 qs 4 mess 4 2010-11-21
Мой запрос:
SELECT q.id, qa.id as answerid, title, qa.message
FROM `questions` q
INNER JOIN questions_answers qa
ON q.id = qa.idquestion
GROUP BY q.id
ORDER BY q.id, answerid DESC
Но он работает некорректно, он группируется по идентификатору вопроса (удаляя все другие сообщения столбцов, оставляя только первое сообщение, поэтому порядок бесполезен)
Любая помощь оценивается. Благодаря
Старая проблема. Здесь решение: http://dev.mysql.com/doc/refman/5.1/en/example-maximum-column-group-row.html
В вашем случае:
SELECT q.id, qa.id as answerid, title, qa.message
FROM questions q
JOIN questions_answers qa ON q.id = qa.idquestion
LEFT JOIN questions_answers qa2 ON qa.idquestion = qa2.idquestion AND qa.date < qa2.date
WHERE qa2.idquestion IS NULL
(Идея состоит в том, чтобы разделить проблему на две операции: одно соединение с вопросами к ответам, а затем использование методов из статьи MySQL.)
Хорошо, вы могли бы подойти по-другому. Вы используете внутреннее соединение, что означает, что вы не будете показывать вопросы без ответа в любом случае, так что найдите максимальный ответ, сгруппированный по идентификатору вопроса, и присоединитесь к таблице вопросов, чтобы получить заголовок.
SELECT
q.id, qa.id as answerid, q.title, qa.message
FROM
questions q
INNER JOIN question_answers qa ON q.id = qa.idquestion AND qa.id IN (SELECT MAX(id) FROM question_answers WHERE idquestion = q.id)
GROUP BY
q.id
ORDER BY
q.id DESC
GROUP BY
кажется, работает сейчас, но я не думаю, что это то, что вы в конечном итоге хотите) ...