我需要做的是,返回今天的注册用户数和激活的用户数(今天) 我的查询看起来就是这样。
SELECT
Count(u1.id) AS `registered`,
Count(u2.id) AS `active`
FROM
USER u1,
USER u2
WHERE
u1.registeredAt = CURDATE()
AND u2.active = 1;
我错误的是它为两者返回0值?
答案 0 :(得分:2)
关于实际查询,您的问题有点不清楚。首先,我将从约会开始。 CURDATE()返回当前日期/时间的日期部分,没问题。但是,您要求“RegisteredAt”= curdate()。 RegisteredAt是仅存储日期还是完整日期/时间。如果是完整日期时间,您应该通过
进行帐户管理其中u1.RegisteredAt> = CURDATE()
所以它从一天开始就得到了所有东西,并且因为没有人应该比今天更大的注册日期,所以你不需要明确地添加AND u1.registeredAt<明天。
现在,您对“活跃”的考虑。如果这也仅适用于当前日期,则根据您的偏好将其调整为IF()或大小写/并且您只需要查询中的用户表ONCE
SELECT
Count(u1.id) AS `registered`,
sum( if( u1.active = 1, 1, 0 )) as ActiveToday
FROM
USER u1
WHERE
u1.registeredAt >= CURDATE()
答案 1 :(得分:0)
您的代码中的问题可能是交叉加入。解决方案:
SELECT (SELECT count(id) FROM User WHERE registeredAt = CURDATE()) AS `registered`,
(SELECT count(id) FROM User WHERE active = 1) AS `active`