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 Databases