10 nov. 2012

[snippet] Récupérer le numéro de ligne avec MySQL

Il est souvent utile de connaître le numéro de ligne de l'enregistrement courant lors d'un parcours du résultat d'une requête SQL, plutôt que d'utiliser une variable compteur côté programmation du traitement. Pour cela, la plupart des SGBD ont implémentés un champ ou une variable système spécifique, comme le ROWNUM (une colonne système qui retourne le numéro de la ligne courante). La plupart des SGBD mais pas MySQL.

Il existe cependant une solution pour pallier à ce manque. Il suffit de définir une variable dans la session MySQL avant la requête, et de l'incrémenter depuis la requête, comme ceci :
SET @rownum=0;
SELECT @rownum:=@rownum+1, * FROM table WHERE champ1 = champ2;

Et voilà, le tour est joué. D'ailleurs, la colonne @rownum pourra être utilisée dans les clauses WHERE, ORDER BY...