mysql - 即使没有用户日志条目,也检索所有用户

标签 mysql pdo left-join

无论如何,我希望此查询显示所有用户。并计算在特定时间段内发生的登录次数(如果没有条目,则返回零)。

目前,它仅显示在该时间段内日志中有条目的用户。

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 JOININNER 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/

相关文章:

php - PDO 错误 - 在非对象上调用成员函数 prepare()

mysql - 即使没有行,左连接也返回 null

mysql - 为什么这个 MySQL 查询在 phpmyadmin 中有效,但在我的 php 脚本中没有返回任何内容?

mysql - 如何从具有状态列的多个表中检索具有多个连接的数据

mysql - 从另一个查询返回的记录的列求和

mysql - http ://www. sql-ex.ru 练习 #39 返回正确的结果,但查询中有错误

php - htaccess 和自定义 php cms 漂亮的 url

mysql - 从 mariadb 迁移到 mysql 5.7 产生了密码重置和列数问题

mysql - 通过单个查询查找 ID 数组中的哪一个没有记录

php - 如何配置 php 以在 CentOS 上启用 pdo 并包含 mysqli?