FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Medlem
|
En tabell med ett Id enligt
CREATE TABLE MinTabell ( Id bigint unsigned NOT NULL AUTO_INCREMENT, ... ... Efterhand har vissa poster raderats och det blir "hål" i följden av Id:en Låt säga att Id ser ut så sorterade asc. 1 2 3 4 5 6 11 12 13 14 ... ... ... Finns det någon sql-sats som leter upp första lediga Id, i detta fall Id = 7 ? Dessutom vill jag har svar på hur stort "hålet" är, dvs hur många oanvända Id det finns iföljd från och med 7. I detta fall 4 st ( 7,8,9,10 )? Två tillfällen som jag vill använda detta. a. När en ny post ska läggas till så ska första lediga Id användas. b. "Packa" ihop posterna så att alla "hål" försvinner. på Serverversion: 5.0.51b så letar denna SQL-sats upp första lediga Id select Id+1 as lastId from MinTabell where (select count(*) from MinTabell where Id = lastId) = 0 limit 1 På Server version: 5.0.75 Server version: 5.1.42 Server version: 5.1.50 får jag ERROR 1054 (42S22): Unknown column 'lastId' in 'where clause' Varför göra detta nu då? Jo det kan man ju fråga sig. Varför ska osten skäras på ett visst sätt? Varför ska ljusen på bordet så i exakta rader? osv Fobier kanske ... Har det någon betydelse ur effektivitetssynpunkt? Kan tillägga att en tabell för närvarande innehåller drygt 68 milj poster. |
|||
![]() |
![]() |
|
|