Obtenir efficacement les positions des lignes après le tri MySQL
Dans une table MySQL, déterminer la position d'une ligne spécifique après un tri basé sur une colonne spécifique (par exemple 'nom') nécessite une approche optimisée pour éviter de charger un grand ensemble de résultats.
Considérez la requête suivante :
<code class="language-sql">SELECT x.id, x.position, x.name FROM (SELECT t.id, t.name, @rownum := @rownum + 1 AS position FROM TABLE t JOIN (SELECT @rownum := 0) r ORDER BY t.name) x WHERE x.name = 'Beta'</code>
Cette requête utilise une sous-requête pour attribuer des positions de ligne en fonction de la clause ORDER BY, puis filtre la ligne requise « bêta ». La position est calculée à l'aide de la variable utilisateur @rownum, qui est automatiquement incrémentée pour chaque ligne.
Vous pouvez également utiliser la requête suivante pour gérer l'égalité différemment :
<code class="language-sql">SELECT t.id, (SELECT COUNT(*) FROM TABLE x WHERE x.name < t.name) + 1 AS position FROM TABLE t WHERE t.name = 'Beta'</code>
Cette méthode renvoie la même position pour les lignes parallèles et peut fournir un ensemble de résultats différent de celui de la première requête.
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!