Este ejemplo puede tener muchas utilidades. Por ejemplo, que queramos generar automáticamente campos ID (sin autoincrement), tanto empezando en 1 como empezando en el número que queramos o realizar alguna operación matemática con ese número; en definitiva vamos a introducir un número incremental a cada resultado que nos devuelva.
Imaginamos que tenemos una tabla `Emails` donde tengo correos electrónicos y nombres de varios amigos. Para crear la estructura, copiar y pegar en MySQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | DROP SCHEMA IF EXISTS `PoesiaBinaria` ; CREATE DATABASE IF NOT EXISTS `PoesiaBinaria` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; USE `PoesiaBinaria`; CREATE TABLE `Emails` ( `Email` VARCHAR(100) NOT NULL, `Nombre` VARCHAR(200) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Pedro', 'pedro@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Javier', 'javier@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Gaspar', 'gaspar@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Maria', 'maria@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Sandra', 'sandra@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Andrea', 'andrea@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Clara', 'clara@misamigos.com'); INSERT INTO `Emails` (`Nombre`, `Email`) VALUES ('Andres', 'andres@misamigos.com'); |
Ahora puedo extraer datos de dicha tabla:
Que me devuelve:
+——–+———————-+
| Email | Nombre |
+——–+———————-+
| Pedro | pedro@misamigos.com |
| Javier | javier@misamigos.com |
| Gaspar | gaspar@misamigos.com |
| Maria | maria@misamigos.com |
| Sandra | sandra@misamigos.com |
| Andrea | andrea@misamigos.com |
| Clara | clara@misamigos.com |
| Andres | andres@misamigos.com |
+——–+———————-+
8 rows in set (0.00 sec)
Ahora bien, para numerar los resultados podemos hacer lo siguiente:
La variable @numero la podemos inicializar al valor que queramos, será donde vamos a empezar menos 1, y el campo posición irá incrementándose a medida que vayamos obteniendo resultados. Muy importantes los «:» (dos puntos), ya qe si no el valor de @numero no se irá actualizando. Es más, si no los ponemos, estaríamos «preguntando» si @numero es igual a @numero+1 por lo que nos devolvería 0.
El resultado de el código anterior es:
+———-+——–+———————-+
| posicion | Email | Nombre |
+———-+——–+———————-+
| 1 | Pedro | pedro@misamigos.com |
| 2 | Javier | javier@misamigos.com |
| 3 | Gaspar | gaspar@misamigos.com |
| 4 | Maria | maria@misamigos.com |
| 5 | Sandra | sandra@misamigos.com |
| 6 | Andrea | andrea@misamigos.com |
| 7 | Clara | clara@misamigos.com |
| 8 | Andres | andres@misamigos.com |
+———-+——–+———————-+
Ojo, empezamos a contar en 1, pero al principio pusimos @numero=0.
Actualización 05/04/2020: Cambiado el orden de los campos al introducir información en la tabla para seguir mejor el ejemplo.
Foto: aktuell