AzerothCore
Pages :

C贸mo obtener registros libres

En algunas ocasiones, necesitamos obtener o conocer registros cuyos valores no est谩n siendo ocupados.

Ya sea porque queremos insertar un nuevo valor, o porque queremos reestructurar nuestra tabla despu茅s de un tiempo.

Para ello, puede utilizar el siguiente script:

SELECT t.id + 1
FROM Table1 t
WHERE NOT EXISTS (
    SELECT * 
    FROM Table1 t2
    WHERE t2.id = t.id + 1
)
LIMIT 1

Debemos sustituir el nombre de la tabla, y los atributos que buscamos.

Ahora veamos un ejemplo. Supongamos que queremos buscar el primer registro libre dentro de creature.

Lo primero que tenemos que identificar es su clave primaria: guid.

SELECT t.`guid` + 1
FROM `creature` t
WHERE NOT EXISTS (
    SELECT * 
    FROM `creature` t2
    WHERE t2.`guid` = t.`guid` + 1
)
LIMIT 1

Al ejecutar la consulta, obtendremos como resultado en este caso, el n煤mero 15.

Nota: Actualmente el valor cambio, y ahora es otro. Pero en su momento era el numero 15.

Lo que debemos hacer ahora es comprobar que este valor no se est谩 utilizando, mediante un SELECT.

SELECT * FROM `creature` WHERE `guid`=15;

Para corroborar que la informaci贸n es correcta, les dejamos los 16 primeros registros.

guid id map zoneId
1 2843 0 0
2 7853 0 0
3 2499 0 0
4 2838 0 0
5 2839 0 0
6 2626 0 0
7 2482 0 0
8 8123 0 0
9 9459 0 0
10 9520 0 0
11 1215 0 0
12 1218 0 0
13 30140 571 0
14 30156 571 0
16 32442 571 0

Como puede ver, el n煤mero 15 est谩 disponible.

Note: la tabla tiene muchos m谩s atributos, pero s贸lo mostramos algunos, para que la tabla no sea tan extensa.