无论如何,我希望此查询显示所有用户。并计算在特定时间段内发生的登录次数(如果没有条目,则返回零)。
目前,它仅显示在该时间段内日志中有条目的用户。
SELECT
COUNT(user_log.type) AS logins,
users.name,
users.email,
users.user_id
FROM
users
LEFT JOIN
user_log
ON
users.user_id = user_log.user_id
WHERE
user_log.type = 8
AND
user_log.date >= :from
AND
user_log.date <= :to
GROUP BY
users.user_id
user_log.type = 8 表示日志条目是登录
:from 是带有开始日期的时间戳
:to 是带有结束日期的时间戳
我使用 PDO
最佳答案
首先,您滥用了 GROUP BY
的有害 MySQL 扩展。 。你将很难调试。所以你需要GROUP BY users.name, users.email. users.id
.
您的查询的编写方式,其中包含 LEFT JOIN
中的项目WHERE
中的编辑表子句,转换LEFT JOIN
至INNER JOIN
。因此,您将丢失第一个表中不匹配的行。
移动那些WHERE
项目到ON
条款和事情会按照你想要的方式进行。就像这样。
SELECT
COUNT(user_log.type) AS logins,
users.name,
users.email,
users.user_id
FROM users
LEFT JOIN user_log
ON (
users.user_id = user_log.user_id
AND
user_log.type = 8
AND
user_log.date >= :from
AND
user_log.date <= :to
)
GROUP BY
users.name, users.email. users.id
关于mysql - 即使没有用户日志条目,也检索所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140995/