我有两张桌子:users
和changes
。我想跟踪每个用户所做的更改次数。目前,我正在结合 PHP 的两个单独的语句中执行此操作:
// Get all users
$stmt = GlobalContainer::$dbh->prepare("SELECT
id, username, realname
FROM
users
ORDER BY role_id, realname");
$stmt->execute();
while ($user = $stmt->fetch()) {
$users[$user['id']] = $user;
$users[$user['id']]['changes'] = 0;
}
// Get number of changes for each user
$stmt = GlobalContainer::$dbh->prepare("SELECT COUNT(*) AS `count`, user_id
FROM
changes
GROUP BY user_id");
$stmt->execute();
while ($changes = $stmt->fetch()) {
$users[$changes['user_id']]['changes'] = $changes['count'];
}
这非常有效,但我认为如果我只是将它组合到一个查询中会更整洁。这就是我所拥有的:
SELECT
users.id, users.username, users.realname, count(changes.user_id) as `count`
FROM
users
LEFT JOIN `changes` ON users.id = changes.user_id
GROUP BY user_id
ORDER BY `count` ASC
但是,由于某种原因,它会跳过所有更改为 0 的用户,即使有几个更改。还有几个用户每个都有 3 个更改,并且所有更改都正确显示。如何使此查询正常工作,以便显示所有更改为 0 的用户?