存在于一个或多个表中的MySql计数ID

存在于一个或多个表中的MySql计数ID,mysql,Mysql,我有表格用户、评论、关注、提示、收集。我需要让所有在2016年1月注册并且至少做过一次活动的用户在同一时期至少提示一次,跟踪某人至少一次,创建至少一个集合,评论至少一次。这是我的疑问: SELECT distinct u.id FROM user u where u.id in (select distinct t.sender_id from tip t WHERE t.date_added>='2016-01-01 00:00:00' AND t.date_added<'2

我有表格用户、评论、关注、提示、收集。我需要让所有在2016年1月注册并且至少做过一次活动的用户在同一时期至少提示一次,跟踪某人至少一次,创建至少一个集合,评论至少一次。这是我的疑问:

SELECT  distinct u.id FROM user u
where u.id in 
(select distinct t.sender_id from tip t 
WHERE t.date_added>='2016-01-01 00:00:00' AND t.date_added<'2016-02-01 00:00:00')
or u.id in 
(select distinct c.user_id from collection c 
WHERE c.date_created>='2016-01-01 00:00:00' AND c.date_created<'2016-02-01 00:00:00')
or u.id in 
(select distinct cc.postedBy_id from comment cc 
WHERE cc.date_posted>='2016-01-01 00:00:00' AND cc.date_posted<'2016-02-01 00:00:00')
or u.id in 
(select distinct f.follower_id from follow f 
WHERE f.follow_date>='2016-01-01' AND f.follow_date<'2016-02-01')
AND u.date_added>='2016-01-01 00:00:00' AND u.date_added<'2016-02-01 00:00:00'
t、 添加日期、创建日期、发布抄送日期、跟踪日期、添加日期-键入日期时间。u、 添加日期-注册日期


查询返回所有用户,而我需要将u.date_添加到2016年1月。我的查询有什么问题?

在编写查询时,日期条件仅适用于上一个或以下日期:


您还可以使用between进行更清晰的查询

SELECT  distinct u.id FROM user u
where ( u.id in 
    (
        select distinct t.sender_id from tip t 
        WHERE t.date_added BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (   select distinct c.user_id from collection c 
        WHERE c.date_created BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (   select distinct cc.postedBy_id from comment cc 
        WHERE cc.date_posted BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (
        select distinct f.follower_id from follow f 
        WHERE f.follow_date BETWEEN '2016-01-01' AND '2016-02-01'
    ) )
AND u.date_added BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'

我认为这是一个错误,在where子句之后,您用括号括起了条件,这是无效的expression@EuphoriaGrogi,为什么它不是有效的?我只是对条件进行分组,以绕过默认运算符precence尝试以下操作:从信息中选择*\u schema.PROCESSLIST,其中id>0或time>0且info为null,此处应用的逻辑相同谢谢,这对我很有帮助。太愚蠢了,竟然忘了括号。@user5883528,很乐意帮忙
SELECT distinct u.id 
FROM user u
where 
(
    u.id in (
        select distinct t.sender_id from tip t 
        WHERE t.date_added>='2016-01-01 00:00:00' AND t.date_added<'2016-02-01 00:00:00'
    )
    or 
    u.id in (
        select distinct c.user_id from collection c 
        WHERE c.date_created>='2016-01-01 00:00:00' AND c.date_created<'2016-02-01 00:00:00'
    )
    or 
    u.id in (
        select distinct cc.postedBy_id from comment cc 
        WHERE cc.date_posted>='2016-01-01 00:00:00' AND cc.date_posted<'2016-02-01 00:00:00'
    )
    or 
    u.id in (
        select distinct f.follower_id from follow f 
        WHERE f.follow_date>='2016-01-01' AND f.follow_date<'2016-02-01'
    )
)
AND 
u.date_added>='2016-01-01 00:00:00' AND u.date_added<'2016-02-01 00:00:00'
SELECT  distinct u.id FROM user u
where ( u.id in 
    (
        select distinct t.sender_id from tip t 
        WHERE t.date_added BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (   select distinct c.user_id from collection c 
        WHERE c.date_created BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (   select distinct cc.postedBy_id from comment cc 
        WHERE cc.date_posted BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'
    )
    or u.id in 
    (
        select distinct f.follower_id from follow f 
        WHERE f.follow_date BETWEEN '2016-01-01' AND '2016-02-01'
    ) )
AND u.date_added BETWEEN '2016-01-01 00:00:00' AND '2016-02-01 00:00:00'