Habiendo visto varias soluciones de tipo "crear tabla temporal con un campo autonumérico" o "utilizar LEFT OUTER JOIN" me encontré con una variante de lo que a continuación expongo:
SET @i = 0;
SELECT (@i := @i + 1) linea, nombre FROM personas ORDER BY nombre;
Estas dos instrucciones nos devolverán para todos los registros de la tabla [personas], la línea y el nombre. Si no inicializamos la variable @i (primera instrucción) el valor quedará disponible por lo que al volver a ejecutar una consulta que utilice dicha variable notaremos el resultado.
Si lo que deseamos es enumerar los registros dentro de un grupo, por ejemplo, si agruparamos a las personas por la columna [id_tipo], quedaría de la siguiente forma .
SET @tipo = 0;
SELECT id_tipo, IF(@tipo = id_tipo,@tipo := @tipo + 1,@tipo := 1) linea , nombre
FROM personas
ORDER BY id_tipo, nombre;
Una alternativa para no tener que fijar el valor de la variable en una instrucción por separado sería, agregar la subconsulta
(SELECT @tipo := 0) dummy
como aparece a continuación:
(SELECT @tipo := 0) dummy
como aparece a continuación:
SELECT id_tipo, IF(@tipo = id_tipo,@tipo := @tipo + 1,@tipo := 1) linea , nombre
FROM personas, (SELECT @tipo := 0) dummy
ORDER BY id_tipo, nombre;