frei Zahlen

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
letters [ Fr, 05 Oktober 2007 12:27 ] [ ID #1837301 ]

Re: frei Zahlen

Mathias Fiedler <letters [at] psygonis.de> 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
FROM meinetabelle a
LEFT JOIN meinetabelle b ON a.id =3D b.id - 1
WHERE b.id IS NULL
LIMIT 1
Sven Paulus [ Fr, 05 Oktober 2007 12:43 ] [ ID #1837302 ]

Re: frei Zahlen

Am 05.10.2007 12:43 schrieb Sven Paulus:
> Mathias Fiedler <letters [at] psygonis.de> 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
Christian Kirsch [ Fr, 05 Oktober 2007 13:41 ] [ ID #1837304 ]

Re: frei Zahlen

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
Gregor Kofler [ Fr, 05 Oktober 2007 14:46 ] [ ID #1837305 ]

Re: frei Zahlen

Am 5 Oct 2007 10:43:27 GMT schrieb Sven Paulus:

> Mathias Fiedler <letters [at] psygonis.de> 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
letters [ So, 14 Oktober 2007 20:38 ] [ ID #1844437 ]
Datenbanken » de.comp.datenbanken.mysql » frei Zahlen

Vorheriges Thema: Fehlerabfrage
Nächstes Thema: Warnung unterbinden