저는 두 테이블 : users
과 changes
을 가지고 있습니다. 각 사용자가 변경 한 횟수를 추적하고 싶습니다. 현재 내가 PHP와 함께 두 개의 문에서 그 일을하고있다 :이 완벽하게 작동하지만,LEFT JOIN은 작동하지 않습니다.
// 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'];
}
난 그냥 하나 개의 쿼리로 결합하는 경우가 깔끔한 것 같아요. 이것은 내가 가지고있는 것입니다 :
그러나 몇 가지 이유가 있지만 몇 가지가 있지만 0이있는 사용자 중 하나만 제외하면 건너 뜁니다. 또한 각각 3 개의 변경 사항을 가진 여러 사용자가 있으며 모두 올바르게 표시하고 있습니다. 이 쿼리를 어떻게 작동 시켜서 변경 사항이 0 인 모든 사용자에게 보여줄 수 있습니까?
데이터를 게시 할 수 있습니까? 사용자가 0 개의 변경 사항을 보여줌으로써 무엇을 의미하는지 이해하지 못했습니다. – DevelopmentIsMyPassion
changes.user_id는 해당 테이블에 일치하는 항목이 없으면 null을 반환합니다. 때로는 널 (NULL)이 COUNT()와 같은 집계를 엉망으로 만듭니다. COUNT() 내에서 null을 0으로 바꿀 수 있습니다. – criticalfix
이것으로 해결됩니다 :'GROUP BY changes.user_id' 대신에'GROUP BY users.id'. 어쩌면 누군가가 왜 * 왜 *를 설명하는 대답을 게시 할 수 있겠습니까? – Mike