Как заставить этот Mysql-запрос работать? - PullRequest
0 голосов
/ 13 сентября 2010

Мой запрос:

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

Спасибо

Ответы [ 3 ]

1 голос
/ 13 сентября 2010

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

0 голосов
/ 13 сентября 2010

добавьте предложение group by, например 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

0 голосов
/ 13 сентября 2010

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

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
...