Zeilennummerierung lückenhaft herausfinden

hallo

ich habe ein kleines programmiertechnisches problem.

es gibt in meiner datenbank eine nummerierung. nicht das auto_increment, sondern eine nummer, die vom user selbst bestimmt wird.
es bietet ihm zwar immer die richtig nummer an, aber er kann selbst eingreifen und zb. nummern ändern.

ich will nun einen hinweis für den user basteln, dass er bestimmte nummern doppelt, und manche vielleicht gar nicht vergeben hat.

ich dachte ich schreibe einfach mal alle werte die der user vergeben hat aufsteigend in ein array, und eine laufende zahl dazu, dann weiß ich schon, ob sie fehler enthält oder nicht.

aber damit kann ich leider nicht wissen, wo es differenzen gibt.

hat sowas schon mal jemand gelöst?
brauche da irgendwie einen lösungsansatz

danke

mikey

Hallo!

Arrays sind schonmal guter Ansatz! *find*

array_diff() - http://de2.php.net/manual/de/function.array-diff.php
könnte man vermutlich zum Lücken finden nutzen
array_intersect() - http://de2.php.net/manual/de/function.array-intersec…
für die doppelten!

Sollten ein paar Nützliche Funktionen zu finden sein :wink:

grüße
Geisterkarle

Doppelte geht per SQL:
SELECT nummer,COUNT(nummer) FROM Tabelle GROUP BY nummer HAVING COUNT(nummer)>1

Nicht vergebene geht in SQL direkt nicht so einfach, dafür bräuchte man erst mal eine Tabelle mit allen Nummern, aber man könnte sich zumindest jeweils die erste nicht vergebene Nummer ausgeben lassen:

SELECT a.nummer+1 FROM Tabelle a LEFT JOIN Tabelle b ON b.nummer = a.nummer+1 WHERE b.nummer IS NULL

Bei 1,2,3,4,7,8,10,11 sollte das dann 5,9,12 als Ergebnis geben. Die Ganze Abfrage nochmal mit -1 statt +1 gibt das Ganze dann von der anderen Seite, also 0,6,9 in dem Fall, aus den beiden Ergebnissen könnte man sich dann die entsprechenden Bereiche der freien Nummern basteln. Letzen / Ersten Wert müsste man halt wegwerfen.