Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这个sql查询可以简化吗?_Mysql - Fatal编程技术网

Mysql 这个sql查询可以简化吗?

Mysql 这个sql查询可以简化吗?,mysql,Mysql,我有两张桌子。MySql 用户:A_ID,name 事件: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

我有两张桌子。MySql

用户:A_ID,name 事件: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
有什么简单而专业的方法来写剧本吗


谢谢

除了以下几点之外,您的查询看起来还行:

您的订单和限制应在外部选择中,否则结果的顺序不确定。 使用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

谢谢,我会试试,有没有办法用sql检查日期是否在过去一周的日期内?@SamirMemmedov:你必须先弄清楚你的周是如何定义的。这取决于你住在哪里以及你的日历遵循什么规则。不同的国家有不同的规则。您可能需要查看or函数,看看其中一个是否适合您的需要。