Optimisation MySQL : Comprendre les limitations de "SELECT DISTINCT"
Dans MYSQL, la clause "SELECT DISTINCT" est utilisée pour éliminer les lignes en double en fonction de valeurs de colonne spécifiées. Cependant, il présente certaines restrictions qui peuvent être rencontrées lors de la tentative de sélection de plusieurs champs.
Problème :
Lors de l'utilisation de « SELECT DISTINCT » suivi d'une liste séparée par des virgules de champs et une autre clause "DISTINCT", comme le montre l'exemple suivant, une erreur se produit :
mysql_query("SELECT *, DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")
Explication :
Contrairement à une fonction qui s'applique à des colonnes individuelles, "DISTINCT" est un modificateur de requête qui affecte toutes les colonnes de la liste de sélection . Elle supprime les doublons uniquement lorsque toutes les colonnes de la sélection ont des valeurs identiques.
Par conséquent, la requête tente d'afficher des lignes distinctes en fonction de toutes les colonnes, y compris celles spécifiées dans la liste séparée par des virgules et "ticket_id". Cela crée une ambiguïté, car il n'est pas clair quelles colonnes doivent être prises en compte pour leur unicité.
Solution :
Pour sélectionner tous les champs et éliminer les doublons en fonction de "ticket_id", le la syntaxe correcte est :
SELECT DISTINCT *, ticket_id FROM temp_tickets ORDER BY ticket_id
Cette requête supprimera les doublons en fonction des valeurs combinées de toutes les colonnes, y compris "ticket_id." Cependant, il affichera toujours uniquement la dernière entrée pour chaque valeur unique « ticket_id ». Pour récupérer uniquement les dernières entrées pour toutes les colonnes, une sous-requête peut être utilisée pour sélectionner le ticket_id maximum pour chaque valeur distincte "ticket_id", comme suit :
SELECT * FROM temp_tickets WHERE ticket_id IN (SELECT MAX(ticket_id) FROM temp_tickets GROUP BY ticket_id)
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!