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 の最大かつ 1 つの値のみを取得したい (合計 7 つの値)。可能であれば、このクエリを修正して機能させるにはどうすればよいですか?

フォーラムのトピックがあり、それぞれに価値がlast_messageあり、最新のトピックのメッセージの時間を取得したい。それが明確であることを願っています。

ありがとうございました

4

3 に答える 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

これにより、「ランク」と呼ばれる計算列が提供されます。列に基づく最新の行にlast_messageは、値ごとに「1」のcat_id値が含まれます。外側のクエリは、ランク値が 1 であるレコードのみを取得します...

于 2010-09-13T16:32:00.617 に答える
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
于 2010-09-13T16:31:25.560 に答える
0

次のような 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

于 2010-09-13T16:32:43.187 に答える