Un utilisateur a rencontré un problème en tentant de filtrer des données dans MySQL à l'aide de la fonction COUNT(*) dans la Clause OÙ. Ils ont recherché une méthode efficace pour accomplir cette tâche sans utiliser d'instruction SELECT imbriquée, car elle peut consommer des ressources importantes.
L'utilisateur a présenté le pseudo-code suivant pour illustrer le résultat souhaité :
SELECT DISTINCT gid FROM `gd` WHERE COUNT(*) > 10 ORDER BY lastupdated DESC
Le problème avec cette approche est que MySQL ne prend pas en charge les fonctions d'agrégation, telles que COUNT(*), dans la clause WHERE. Pour contourner cette limitation, l'utilisateur a exploré la possibilité d'utiliser un SELECT imbriqué pour compter le nombre de lignes pour chaque gid unique, puis filtrer les résultats en conséquence. Cependant, cette méthode a été jugée inefficace et gourmande en ressources.
Heureusement, MySQL propose une solution plus optimisée en utilisant les clauses GROUP BY et HAVING :
SELECT gid FROM `gd` GROUP BY gid HAVING COUNT(*) > 10 ORDER BY lastupdated DESC
Cette requête effectue les étapes suivantes :
En tirant parti les clauses GROUP BY et HAVING, cette approche permet d'obtenir efficacement le résultat souhaité sans recourir à une instruction SELECT imbriquée, ce qui entraîne des performances et une efficacité améliorées.
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!