#mysql #sql
#mysql #sql
Вопрос:
SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'n'),a.answer) as description
FROM questions q
LEFT JOIN (
SELECT question_id, crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer
FROM answers
GROUP BY question_id
ORDER BY crdate DESC
) a ON q.uid = a.question_id
WHERE q.deleted = 0 AND q.answers > 0
Я хочу выбрать uid, заголовок и идентификатор категории из первой таблицы, весь текст и МАКСИМАЛЬНУЮ дату ответов из второй таблицы. В этом запросе выберите Min crdate. Как я должен это изменить?
UPD У меня есть таблицы вопросов и ответов. В качестве имен таблиц я выбираю вопросы и ответы. На один вопрос может быть несколько ответов. Я хочу объединить все ответы в одну переменную (позже объединить некоторые переменные в одну для полнотекстового поиска) и выбрать crdate последнего ответа.
Ответ №1:
Попробуйте это
SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'n'),a.answer) as description
FROM questions q
LEFT JOIN (
SELECT question_id, max(crdate) as crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer
FROM answers
GROUP BY question_id
ORDER BY crdate DESC
) a ON q.uid = a.question_id
WHERE q.deleted = 0 AND q.answers > 0
GROUP BY q.uid
Комментарии:
1. это странно, но да
2. Это даст максимальное значение только из таблицы ответов
Ответ №2:
Используйте два объединения:
SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'n'),a.answer) as description
FROM questions q LEFT JOIN
(SELECT a.question_id, a.crdate, GROUP_CONCAT(a.text SEPARATOR '|| ') answer
FROM answers a JOIN
(SELECT a2.question_id, MAX(a2.crdate) as maxcr
FROM answers a2
GROUP BY a2.question_id
) a2
ON a2.question_id = a.question_id and a2.maxcr = a.crdate
GROUP BY question_id
) a
ON q.uid = a.question_id
WHERE q.deleted = 0 AND q.answers > 0
GROUP BY q.uid;
Самый внутренний подзапрос получает максимальную дату создания ответов на вопросы. Средний подзапрос делает то, что вы хотите, объединяя ответы вместе.
Неясно, что GROUP BY
делает внешний. Действительно ли это необходимо? Почему вы используете GROUP BY
без функций агрегирования? Какие значения следует использовать для других других столбцов во внешней SELECT
таблице? Ваш вопрос не предоставляет достаточно информации для решения этих проблем, но запрос по-прежнему выглядит подозрительным даже после получения самых последних crdate
ответов на запросы.
Комментарии:
1. Вы правы, группировать по не нужно. Я обновил свой вопрос.