2016-10-18 4 views
0
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, название и идентификатор категории из первой таблицы, весь текст и MAX crdate ответов от второй таблицы. В этом запросе выберите Min crdate. Как мне это изменить?Выберите максимальное время из второй таблицы JOIN

UPD У меня есть вопросы и ответы на таблицы. В качестве имен таблиц я выбираю вопросы и ответы. На один вопрос может быть несколько ответов. Я хочу, чтобы конкат все ответы в одной переменной (позже concat некоторые переменные в одном для полнотекстового поиска) и выберите 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 
+0

thx, я думал, что max (crdate) возвращает максимальное значение из ВСЕХ таблиц – Dev

+0

Это дает правильный результат? – Madhivanan

+0

это странно, но да – Dev

1

Используйте два присоединяется:

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.

+0

Вы правы, группа не нужна. Я обновляю свой вопрос. – Dev

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