2010-09-13 2 views
0

Мой запрос:Как сделать этот запрос Mysql?

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

Спасибо

ответ

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 

Это обеспечит вычисляемый столбец под названием «Оценка», где самый последний ряд, основанный на столбец last_message будет иметь значение «1» на cat_id. Внешний запрос только получает записи, в которых ранг значение один ...

+1

Этот запрос выглядит некрасиво, как ад:/ –

+1

@hey : Виноват MySQL в том, что он еще не поддерживает аналитические функции. До тех пор ожидайте таких хаков. Кроме того, вы не должны использовать 'SELECT *' - потому что я не знал столбцов в FORUM_TOPICS, вы получите все из них ... плюс «rank» и столбец для назначения значения cat_id в выводе. –

+0

oK, tHanks .. –

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

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

  • Нет связанных вопросов^_^