MySQL : Contrôler la sélection des lignes renvoyées par un groupe
Dans MySQL, récupérer la ligne avec la version la plus élevée pour chaque ID peut être une tâche complexe. Cependant, plusieurs approches peuvent être utilisées pour atteindre cet objectif.
Une méthode consiste à utiliser une sous-requête :
SELECT * FROM (SELECT * FROM table ORDER BY version_id DESC) t1 GROUP BY t1.id
Cette sous-requête trie les lignes par ordre décroissant par ID de version pour chaque identifiant. Par la suite, la requête principale regroupe les lignes triées par ID. Cette approche crée une table temporaire en mémoire, mais elle peut être efficace si un index existe sur les colonnes (id, version_id).
Une autre stratégie implique une requête imbriquée :
SELECT * FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1 INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id
Cette La requête calcule l'ID de version maximum pour chaque ID dans une sous-requête. La requête principale joint ensuite la sous-requête à la table d'origine à l'aide des colonnes ID et version_id pour récupérer les lignes avec le maximum d'ID de version.
Les deux méthodes fournissent des solutions efficaces pour sélectionner la ligne avec l'ID de version le plus élevé pour chaque ID. . L'approche la plus appropriée dépend des exigences spécifiques et des considérations de performances de l'application.
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!