Мой запрос:
SELECT *
FROM forum_topics
WHERE cat_id IN(1,2,3,4,5,6,7)
ORDER BY last_message DESC
LIMIT 7
Я хочу получить самое большое и единственное значение для каждого cat_id (всего 7 значений). Как исправить этот запрос, чтобы он работал, даже если это возможно?
Есть темы форума, и каждый имеет значение last_message
, и я хочу получить последнее время сообщения темы. Надеюсь, что это понятно.
Спасибо
У MySQL нет поддержки аналитических функций, что и есть на самом деле:
SELECT x.*
FROM (SELECT ft.*,
CASE
WHEN @cat_id = ft.cat_id THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank,
@cat_id = ft.cat_id
FROM FORUM_TOPICS ft
JOIN (SELECT @rownum := 0, @cat_id := -1) r
ORDER BY ft.cat_id, ft.last_message DESC)
WHERE x.rank = 1
Это предоставит вычисленный столбец с названием "rank", где самая последняя строка, основанная на столбце last_message
, будет иметь значение "1" за cat_id
. Внешний запрос получает только записи, чье ранговое значение является одним...
Ваш вопрос немного запутан, но я думаю, что вы ищете это.
SELECT * FROM forum_topics WHERE cat_id IN(1,2,3,4,5,6,7) group by cat_id order by max(last_message) LIMIT 7
добавить группу по предложению как GROUP BY cat_id
Таким образом, ваш запрос станет SELECT *
FROM forum_topics
WHERE cat_id IN(1,2,3,4,5,6,7)
GROUP BY cat_id
ORDER BY last_message DESC
LIMIT 7
SELECT *
- потому что я не знал столбцы в FORUM_TOPICS, вы получите все их ... плюсrank
и столбец для назначения значения cat_id в выходных данных.