2012-06-08 56 views
1

我有2個表格。 MySQL的可以簡化這個SQL查詢嗎?

用戶: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 

是否有任何簡單的方法來編寫該腳本?

感謝

回答

0

你的查詢看起來OK除了幾個小問題:

  • ORDER BYLIMIT應該在外部選擇,否則結果的順序是不確定的。
  • 使用JOIN關鍵字來連接兩個表。

試試這個:

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 
+0

感謝,我會嘗試一下,有沒有什麼辦法來檢查,如果日期是用sql過去一週內的日期? –

+0

@SamirMemmedov:你必須先弄清楚你的星期是如何定義的。這取決於你住在哪裏以及你的日曆遵循什麼規則。不同的國家有不同的規則。你可能想看看['WEEK'](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week)或['WEEKOFYEAR' ](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_weekofyear)函數,看看其中的一個是否適合您的需求。 –

+0

謝謝你的回答。 –