Как заставить этот Mysql-запрос работать?

0

Мой запрос:

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, и я хочу получить последнее время сообщения темы. Надеюсь, что это понятно.

Спасибо

Теги:
greatest-n-per-group
analytic-functions

3 ответа

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

У 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. Внешний запрос получает только записи, чье ранговое значение является одним...

  • 1
    Этот запрос выглядит ужасно чертовски: /
  • 1
    @hey: вините MySQL за то, что он пока не поддерживает аналитические функции. До тех пор ожидайте таких взломов. Кроме того, вы не должны использовать SELECT * - потому что я не знал столбцы в FORUM_TOPICS, вы получите все их ... плюс rank и столбец для назначения значения cat_id в выходных данных.
Показать ещё 2 комментария
0

Ваш вопрос немного запутан, но я думаю, что вы ищете это.

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
0

добавить группу по предложению как 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

Ещё вопросы

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