2012-06-08 51 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

谢谢你的回答。 –