huecos en una serie mysql - Blog Juegosocio

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…

huecos en una serie mysql

Por mameyugo el 25.Sep.2008 facebook_16 twitter_16 delicious_16

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.

Tags: mysql, Categorías: PHP, programacion, Comentarios: 3, Lecturas: 741

Comentarios


gravatar
08.Oct.2008
Muy interesante lo de las variables en MySQL. Espero ese próximo post con impaciencia :D.

gravatar
marcx
25.May.2010
Muy buen tip, me sirvio muchisimo, mas cuando estoy a punto de llegar al tope de mi tabla, grax

gravatar
drac
10.Aug.2011
Hola,
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

Escribe un comentario

Nick
Email
URL