Проблема с запросом MySQL

0

У меня есть 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

Но он работает некорректно, он группируется по идентификатору вопроса (удаляя все другие сообщения столбцов, оставляя только первое сообщение, поэтому порядок бесполезен)

Любая помощь оценивается. Благодаря

  • 0
    Можете ли вы опубликовать некоторые примеры данных в таблицах, чтобы точно показать, как вы хотите, чтобы выходные данные генерировались из сохраненных данных? (Например, простое удаление GROUP BY кажется, работает сейчас, но я не думаю, что это то, что вы в конечном итоге хотите) ...
  • 0
    Если я удалю группу, я получу все ответы. Например, если у меня есть один вопрос с двумя ответами, вместо этого у меня появятся две строки для этого вопроса. Если у меня есть X вопросов, я хочу получить X строк при выполнении запроса, поэтому только последний ответ / вопрос,
Теги:
greatest-n-per-group

2 ответа

2
Лучший ответ

Старая проблема. Здесь решение: 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.)

  • 0
    Я хотел бы сделать это только с 1 запросом, без подзапросов.
  • 0
    Тогда, может быть, просто используйте решение с LEFT JOIN !?
Показать ещё 3 комментария
0

Хорошо, вы могли бы подойти по-другому. Вы используете внутреннее соединение, что означает, что вы не будете показывать вопросы без ответа в любом случае, так что найдите максимальный ответ, сгруппированный по идентификатору вопроса, и присоединитесь к таблице вопросов, чтобы получить заголовок.

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

  • 0
    Это хорошо работает для qa.id, но qa.message неверно, все еще первый. Например, я хочу найти последнего пользователя, который ответил на это сообщение, МАКС не будет работать здесь,
  • 0
    Нет, это даст произвольное сообщение для qa.message, не самое последнее.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню