MySQL najdi prvni diru

Petr Vileta petr na practisoft.cz
Pondělí Červenec 21 02:03:14 CEST 2003


Pred casem se tu resilo pridelovani ciselneho ID, jestli autoincrement nebo
ne. K tomu se nechci vracet. Dejme tomu, ze mate ID jako souvislou,
neprerusenou radu cisel. Pozdeji z nejakeho duvodu nektere zaznamy vymazete
a tim vzniknou v posloupnosti diry. Vy byste potrebovali najit nejnizsi
(nebo nejvyssi) "diru", tedy nepouzite cislo. Trochu jsem koumal a asi jsem
to vyresil, takze pokud se to nekomu bude hodit, tady je cely priklad

CREATE TABLE cisla(cislo tinyint(2) unsigned);
INSERT INTO cisla SET cislo=1;
INSERT INTO cisla SET cislo=2;
INSERT INTO cisla SET cislo=3;
INSERT INTO cisla SET cislo=6;
INSERT INTO cisla SET cislo=7;
INSERT INTO cisla SET cislo=9;
INSERT INTO cisla SET cislo=11;

# najdi nejnizsi neexistujici cislo
SET @a=0;
SELECT @a AS vysledek,cislo,(@a:=@a+1) AS b FROM cisla HAVING cislo<>b LIMIT
1;
+--------+-----+-+
|vysledek|cislo|b|
+--------+-----+-+
|       4|    6|5|
+--------+-----+-+


# najdi nevyssi neexistujici cislo
SELECT @a:=MAX(cislo+1) FROM cisla;
+----------------+
|@a:=MAX(cislo+1)|
+----------------+
|              10|
+----------------+
# tohle jeste neni vysledek

SELECT @a AS vysledek,cislo,(@a:=@a-1) AS b FROM cisla HAVING cislo<>b ORDER
BY pole2 DESC LIMIT 1;
+--------+-----+-+
|vysledek|cislo|b|
+--------+-----+-+
|      10|    9|9|
+--------+-----+-+

Dulezity je "vysledek", tech dalsich sloupcu si proste nevsimejte :-)
--
Petr



Další informace o konferenci Test