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关键字连接两个表。

尝试这个:

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 回答