Erste freie ID einer Tabelle ermitteln
ACHTUNG! Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwischen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann.
zB. Wenn wir eine ID-Reihe haben 1,2,3,4,5,7,8,15 dann ist die erste ungenutzte id die 6.
SELECT MIN(newIds.newId) AS firstNotUsedId FROM -- jeweils die nächst höhere ID ermitteln (SELECT id + 1 AS newId FROM test) AS newIds -- und mit der Tabelle zurückverknüpfen LEFT JOIN (SELECT id FROM test ) AS ids ON newIds.newId = ids.id WHERE ids.id IS NULL;
Zur Erklärung: Ich ermittle auf jeden Datenstz die Nächst höhere ID
SELECT id + 1 AS newId FROM test
An diese hänge ich die Tabelle mittels eines LEFT JOIN Daraus nehme ich alle newId die in der Tabelle nicht als ID bestehen. Zuguter letzt lese ich mit min() die kleinste daraus aus.