huecos en una serie mysql
Por mameyugo el 25.Sep.2008
cuantas veces te habra pasado que estas llenando una tabla, borras registros y despues intentas rellenar los huecos pero es un caos, bueno pues existe una solucion sencilla, que puedes aplicar en cualquier caso, se trata de una consulta que te devuelve el campo numerico mas pequeño libre de la serie. la consulta usa variables de mysql de una forma sencilla sin entrar a funciones.
poniendonos en situacion
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 mas pequeño libre de la serie, el unico problema existe si ejecutamos al mismo tiempo dos consultas que usen la variable de mysql, entonces el resultado no sera correcto (cabe decir que esto es muy complicado, porque las consultas se ejecutan rapidisimo, y seria mucha casualidad), en un proximo post resolveremos este problema.
Comentarios
me ha gustado mucho el código.
Yo le añadiría un " limit 0,1" para que sólo saque el primero que es el que vas a usar ya que el resto serán libres pero no mínimos.
Por otra parte se puede hacer un "set @a:=0;" en vez de select para que lo haga más rápido.
Un saludo y gracias