rand()
am 02.01.2006 15:10:10 von Oliver BenningHallo,
kann ich mir eine Zahl mit rand() erzeugen lassen, die noch nicht in
einer Tabellenspalte vorkommt?
Gruß,
Oliver
Hallo,
kann ich mir eine Zahl mit rand() erzeugen lassen, die noch nicht in
einer Tabellenspalte vorkommt?
Gruß,
Oliver
Oliver Benning schrieb:
> Hallo,
>
> kann ich mir eine Zahl mit rand() erzeugen lassen, die noch nicht in
> einer Tabellenspalte vorkommt?
>
Ja, wenn der 'Zufall' es so will. Wenn Du meinst: Ich möchte gerne
irgendwie jedesmal eine Zahl erzeugen, die garantiert noch nicht in
einer Tabellenspalte vorkommt: Glaube ich nicht. Wozu soll das gut sein?
BTW: Wenn Du mal ein wenig über die Implementierung von
Zufallsgeneratoren nachliest, dürftest Du schnell bemerken, dass Dinge
wie 'rand()' keineswegs zufällig erzeugte Zahlen liefern, sondern eine
deterministische Folge, die sich irgendwann wiederholt. Wenn Du also
alle von rand() erzeugten Zahlen nacheinander in Deine Tabelle
einträgst, bekommst Du irgendwann einen Doppler.
Falls du das wirklich machen willst, solltest du einen sehr großen
Zahlbereich wählen. Implementieren kannst du die Abfrage dann mit PHP.
Du kannst die Daten in einem Array speichern und jedes mal auslesen
oder gleich in der Datenbank die existenz der gerader erstellten
Zufallszahl überprüfen. Wenn sie schon existiert, musst du eine neue
Zufallszahl generieren lassen, so lange, bis eine noch nicht
existierende erzeugt wird.
"=?iso-8859-1?B?VWxpIEv2aGxlcg==?="
Das mußt du noch üben. Warum hängst du deine Antwort auf Olivers
Frage an Christians Posting?
> Falls du das wirklich machen willst, solltest du einen sehr großen
> Zahlbereich wählen. Implementieren kannst du die Abfrage dann mit PHP.
> Du kannst die Daten in einem Array speichern
Bloß nicht!
> oder gleich in der Datenbank die existenz der gerader erstellten
> Zufallszahl überprüfen. Wenn sie schon existiert, musst du eine neue
> Zufallszahl generieren lassen, so lange, bis eine noch nicht
> existierende erzeugt wird.
Prima! Und wenn der gewählte Zahlenbereich doch mal voll ist
(oder rand() unglücklicherweise eine kleinere Periode hat als
der Wertevorrat der Key-Spalte) bekommen wir eine Endlosschleife?
Oliver: erkläre doch nochmal, wozu das gut sein soll?
Ein gängiges Verfahren zur Erzeugung von (ohne Kenntnis des
Algorithmus) nicht vorhersagbaren IDs ist
MD5(CONCAT("geheimer String", zähler))
Als Zähler könnte z.B. eine per AUTO_INCREMENT vergebene ID
dienen. Allerdings muß man diese Daten nicht in der Datenbank
speichern, da sie sich jederzeit aus der ID berechnen lassen.
XL
Oliver Benning wrote:
> Hallo,
>
> kann ich mir eine Zahl mit rand() erzeugen lassen, die noch nicht in
> einer Tabellenspalte vorkommt?
>
> Gruß,
> Oliver
Nimm doch einfach ein AutoInc-Feld in die Tabelle
mfg
Heinz