私は2つのテーブルを持っています:users
とchanges
。各ユーザーが行った変更の数を追跡したいと思います。現在、PHPと組み合わせた2つの別々のステートメントでそれを行っています。
// 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'];
}
これは完璧に機能しますが、1つのクエリにまとめた方がいいと思います。これは私が持っているものです:
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のユーザーの1つを除いて、複数のユーザーがスキップされています。また、それぞれ3つの変更があり、すべてが正しく表示されているユーザーもいます。このクエリを機能させて、変更が0のすべてのユーザーを表示するにはどうすればよいですか?