La requête SQL renvoie le nombre total de lignes au lieu du nombre de lignes individuelles
Lors de l'exécution de requêtes SQL, veillez à utiliser correctement les fonctions d'agrégation telles que COUNT(*) pour éviter des résultats incorrects. Considérez la déclaration suivante :
<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura` FROM ( SELECT DISTINCT * FROM messages m INNER JOIN ( SELECT Friend2 AS Friend FROM friends WHERE Friend1 = '1' UNION ALL SELECT Friend1 AS Friend FROM friends WHERE Friend2 = '1' ) friends ON m.Poster = friends.`Friend` UNION ALL SELECT DISTINCT *, '1' FROM messages WHERE `Poster` = '1' ) var LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus) GROUP BY `ID`, `Poster` ORDER BY `Time` DESC LIMIT 10;</code>
Le but de cette requête est d'interroger les données des tables messages
et messages_aura
et de compter le nombre d'occurrences de messages d'aura pour chaque utilisateur. Cependant, le problème réside dans la sous-requête LEFT JOIN
, où la clause GROUP BY
est manquante.
Problème : Sans la clause GROUP BY
, la sous-requête renverra le nombre total de messages aura pour tous les utilisateurs au lieu de compter le nombre pour chaque utilisateur. Par conséquent, la sortie affiche des décomptes incorrects, car elle regroupe toutes les lignes au lieu de les regrouper par colonnes pertinentes.
Solution : Pour résoudre ce problème, la clause GROUP BY
doit être ajoutée à la sous-requête LEFT JOIN
:
<code class="language-sql">LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura GROUP BY AuraID, AuraStatus ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
En ajoutant GROUP BY AuraID, AuraStatus
, la sous-requête regroupe désormais les résultats selon ces colonnes, garantissant ainsi que le nombre d'auras pour chaque utilisateur est exact.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!