frei Zahlen
am 05.10.2007 12:27:42 von letters
Hallo,
ich habe in einer Tabelle kundennummern gespeichert. Diese werden
automatisch vergeben. Nehmen wir mal an von 0 - 100. Jetzt wird der Kunde
mit der Nummer 22 entfernt. Meine Zahlenfolge hat nun also ein "Loch". Ich
möchte nun alos dem nächsten Kunden die freigewordene Nummer 22 verpassen.
Dazu muß ich also die erste fehlende Zahl aus einer Reihe finden. IN meinem
Fall die 22. Wie mache ich das mit mysql?
mfg
Mathias
Re: frei Zahlen
am 05.10.2007 12:43:27 von Sven Paulus
Mathias Fiedler wrote:
> ich habe in einer Tabelle kundennummern gespeichert. Diese werden
> automatisch vergeben. Nehmen wir mal an von 0 - 100. Jetzt wird der Kund=
e
> mit der Nummer 22 entfernt. Meine Zahlenfolge hat nun also ein "Loch". I=
ch
> möchte nun alos dem nächsten Kunden die freigewordene Nummer 22 verp=
assen.
> Dazu muß ich also die erste fehlende Zahl aus einer Reihe finden. IN m=
einem
> Fall die 22. Wie mache ich das mit mysql?
Warum willst Du das? Wenn Du spaeter mal nach Kunde 22 schauen sollst (z.B=
..
auf Backups o.ae.) ist dann nicht mehr klar, welcher Kunde 22 gemeint ist.
Normalerweise sollten derartige Groessen immer nur monoton steigen und
niemals reused werden.
Aber wenn es denn unbedingt sein muss:
SELECT a.id+1=20
FROM meinetabelle a=20
LEFT JOIN meinetabelle b ON a.id =3D b.id - 1=20
WHERE b.id IS NULL
LIMIT 1
Re: frei Zahlen
am 05.10.2007 13:41:26 von Christian Kirsch
Am 05.10.2007 12:43 schrieb Sven Paulus:
> Mathias Fiedler wrote:
>> ich habe in einer Tabelle kundennummern gespeichert. Diese werden
>> automatisch vergeben. Nehmen wir mal an von 0 - 100. Jetzt wird der Kunde
>> mit der Nummer 22 entfernt. Meine Zahlenfolge hat nun also ein "Loch". Ich
>> möchte nun alos dem nächsten Kunden die freigewordene Nummer 22 verpassen.
Warum? Hast Du Angst, die Kundennummern könnten ausgehen? Dann nimmt
ein Bigint unsigned.
--
Christian
Re: frei Zahlen
am 05.10.2007 14:46:48 von Gregor Kofler
Mathias Fiedler meinte:
> Hallo,
>
> ich habe in einer Tabelle kundennummern gespeichert. Diese werden
> automatisch vergeben. Nehmen wir mal an von 0 - 100. Jetzt wird der Kunde
> mit der Nummer 22 entfernt. Meine Zahlenfolge hat nun also ein "Loch". Ich
> möchte nun alos dem nächsten Kunden die freigewordene Nummer 22 verpassen.
> Dazu muß ich also die erste fehlende Zahl aus einer Reihe finden. IN meinem
> Fall die 22. Wie mache ich das mit mysql?
Vergiss es. Du fragst nach Lösungen für nichtexistente Probleme. Man
vergibt IDs nicht "erneut". Neben dem vollkommenen Fehlen eines
praktischen Nutzens handelst du dir reihenweise potentielle Probleme ein.
Etwas Literaturrecherche zu den Themen "Primärschlüssel" und
"referentielle Integrität" hilft.
Gregor
--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Re: frei Zahlen
am 14.10.2007 20:38:27 von letters
Am 5 Oct 2007 10:43:27 GMT schrieb Sven Paulus:
> Mathias Fiedler wrote:
>> ich habe in einer Tabelle kundennummern gespeichert. Diese werden
>> automatisch vergeben. Nehmen wir mal an von 0 - 100. Jetzt wird der Kunde
>> mit der Nummer 22 entfernt. Meine Zahlenfolge hat nun also ein "Loch". Ich
>> möchte nun alos dem nächsten Kunden die freigewordene Nummer 22 verpassen.
>> Dazu muß ich also die erste fehlende Zahl aus einer Reihe finden. IN meinem
>> Fall die 22. Wie mache ich das mit mysql?
>
> Warum willst Du das? Wenn Du spaeter mal nach Kunde 22 schauen sollst (z.B.
> auf Backups o.ae.) ist dann nicht mehr klar, welcher Kunde 22 gemeint ist.
> Normalerweise sollten derartige Groessen immer nur monoton steigen und
> niemals reused werden.
>
> Aber wenn es denn unbedingt sein muss:
>
> SELECT a.id+1
> FROM meinetabelle a
> LEFT JOIN meinetabelle b ON a.id = b.id - 1
> WHERE b.id IS NULL
> LIMIT 1
Ich möchte nicht die ID neu vergeben, dafür habe ich ein Auto Increment.
Aber ich habe eine eigene interne Kundennummer und die soll eben so
vergeben werden. Dein Ansatz war absolut richtig. Danke.
mfg
Mathias