Problem (replace oder nicht)

reflex

Grünschnabel
Ich habe 3 Spalten:

TABELLE = "tabellenname"
SPALTE 1 || id_1
SPALTE 2 || id_2
SPALTE 3 || id_3

Jetzt generiere ich zufällige zahlen.

$id_1 = 1;
$id_2 = round(1 , 500)
$id_3 = round(1, 10)

Jetzt das Problem:

Ich will überprüfen, ob genau diese Zahlen schon existieren. Wie verwirkliche ich das am Besten?

Wenn alle richtig läuft, dann sollten in der Datenbank keine doppelten einträge mehr sein. Sobald das script feststellt, das ein Eintrag bereits besteht, sollte einfach eine neue Zahl generiert werden.

Vielen Dank für eure Hilfe.
 
Suchst du nicht eher das auto_increment Flag?

Ansonsten kannst du mit
Code:
SELECT COUNT(*) AS `anzahl` FROM `tabelle` WHERE `id`=".(int)$iDeineZufallsZahl.";
prüfen, ob die ID schon einmal vorhanden ist.
Aber vorsicht: In Verbindung mit Zufallszahlen können so recht schnell sehr viele
Queries entstehen!

Ps: round liefert keine Zufallszahlen :)
Du meinst sicher rand, oder besser mt_rand
 
Jup rand() meinte ich natürlich.

Das Problem ist wiefolgt:

Die 3 id's werden bei einer anmeldung vergeben, sollen aber nicht alle nacheinander sein. (also schon per zufall).. Aber wie schon oben gesagt nichts darf doppelt sein.
Und eine andere Möglichkeit dieses zu verwirklichen sehe ich nicht ?!

Aber wenn nacher 4999 einträge sind, dann ist nur noch einer möglich, und bis das script den per zufall gefunden hat, dauert das jahre..

Also kann ich die sache ganz abhaken...^^ Aber wie mach ich das nun?
 
so ganz spontan würde mir folgende Möglichkeit einfallen:

Du liest alle IDs aus der DB aus und startest eine while-Schleife, in der du diesen Query als Array speicherst. Innerhalb der While-Schleife vergleichst du jetzt immer deine Zufallszahl und den aktuellen DB-Eintrag. Wenn der Fall eintrit, dass die ID bereits vorhanden ist, erstellst du eine neue und fängst das ganze wieder von vorne an.


Ich bin mir bewusst, dass das ganze keine Musterlösung ist und auch sehr aufwändig ist (vom Rechenaufwand her, bis eine While-Schleife 3000 mal durchgelaufen is kanns dann evtl. doch schon etwas dauern...), aber es ist mir einfach auf die schnelle eingefallen; falls es keine bessere Möglichkeit gibt....
 
Gibt es überhaupt keine andere möglichkeit?

Und ich versteh' dein beispiel nicht... Wie soll ich denn alle id's aus der DB auslesen und vergleichen? (Ein Beispiel wäre ideal :) )

Für andere Lösungen bin ich SEHR dankbar.

mfg reflex
 
Zurück