1

私は2つのテーブルを持っています。MySql

ユーザー: A_ID、名前イベント: B_ID、A_ID、cat_id、日付

ここで、特定の期間にイベントにより多く参加したすべてのユーザーを取得したいと考えており、カテゴリにも基づいて追加する必要があります。私はこのようなことをしています:

select name from users ,
 (select A_id, count(*) 
  from   event 
  where date<=givendate
 group by A_id
 order by count(*) desc ) e
 where users.A_id=e.a_id
 limit 0,5

そのスクリプトを書くための簡単で専門的な方法はありますか?

ありがとう

4

1 に答える 1

0

あなたのクエリは、いくつかの小さな点を除けば問題ないように見えます。

  • あなたのORDER BYandLIMITは外側の選択にある必要があります。そうでない場合、結果の順序は不定です。
  • JOINキーワードを使用して、 2 つのテーブルを結合します。

これを試して:

SELECT u.name
FROM users AS u
JOIN
(
    SELECT A_id, COUNT(*) AS cnt
    FROM event
    WHERE date <= givendate
    AND cat_id = 42
    GROUP BY A_id
) AS e
USING (A_id)
ORDER BY e.cnt DESC
LIMIT 5
于 2012-06-08T21:27:42.310 に答える