¿Cuántas veces te habrá pasado que estás llenando una tabla, borras registros y después intentas rellenar los huecos, pero es un caos? Bueno, pues existe una solución sencilla, que puedes aplicar en cualquier caso: se trata de una consulta que te devuelve el campo numérico más pequeño libre de la serie. La consulta usa variables de MySQL de una forma sencilla sin entrar a funciones.
Poniéndonos en situación, tendremos una tabla:
| tabla1 |
| id int(11) not null auto_increment |
| campo1 varchar(40) not null |
CREATE TABLE IF NOT EXISTS `numeros` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `campo1` VARCHAR(40) COLLATE utf8_spanish_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1 ; SELECT @a:=0; SELECT minimo FROM (SELECT id ,@a+1 as minimo, @a:=id AS ordenacion FROM tabla1 ORDER BY id ) t1 WHERE t1.id!=t1.minimo;
El resultado de esta consulta es el campo más pequeño libre de la serie. El único problema existe si ejecutamos al mismo tiempo dos consultas que usen la variable de MySQL: entonces el resultado no será correcto (cabe decir que esto es muy complicado, porque las consultas se ejecutan rapidísimo, y sería mucha casualidad). En un próximo post resolveremos este problema.