Zufallszahl und Vergleichen

Sasser

Erfahrenes Mitglied
Hallo!

Ich habe 2 Variablen;

maximale Sektoren: $sectors
maxiamle Städte in Sektoren: $citysinsectors

Ich möchte nun gerne zwischen 1 und $sectors eine Zufallszahl generieren und zwischen 1 und $citysinsectors!

Danach möchte ich gern mit der zusammengesetzten Koordinate ($sector:$place) die Tabelle citys (Feld: coordinate) abfragen, ob die Koordinate bereits vorhanden ist und wenn ja das ganze wiederholen!

Hat jemand einen Vorschlag? :confused:
 
Was ist daran so kompliziert?
PHP:
$coord = rand(1, $sectors).':'.rand(1, $citysectors);
 
Das sieht ja schonmal super aus, nur muss man nun noch prüfen, ob jemand in der Tabelle "citys" Spalte "coordinates" diese schon hat und wenn ja nochmals generieren, bis eine generiert wurde die nicht in der Spalte "coordinates" vorhanden ist!

Wie kann ich das noch realisieren? :confused:
 
PHP:
$i = 0;
do {
	$coord = rand(1, $sectors).':'.rand(1, $citysectors);
	$found = /* … */;
	$i++;
} while (!$found && $i < $sectors*$citysectors);
 
Verstehe nicht was da jetzt rein kommt... So in etwa?

PHP:
$i = 0;
do {
    $coord = rand(1, $sectors).':'.rand(1, $citysectors);
    $found = $row=mysql_fetch_assoc(mysql_query("SELECT coordinates FROM citys WHERE coordinates = '$coord'", $db));;
    $i++;
} while (!$found && $i < $sectors*$citysectors);
 
Arbeite lieber mit der mysql_num_rows()-Funktion:
PHP:
$i = 0;
do {
	$coord = rand(1, $sectors).':'.rand(1, $citysectors);
	$found = mysql_num_rows(mysql_query("SELECT coordinates FROM citys WHERE coordinates = '$coord'", $db));
	$i++;
} while ($found && $i < $sectors*$citysectors);
 
Noch eine Frage dazu;

Warum muss $i hochgezählt werden!?

Bitte um kurze Beschreibung, da ich gern die Funktion auch verstehen möchte :)
 
Die Logik, die zugrundeliegt, ist, dass es maximal $sectors*$citysectors Möglichkeiten für Koordinaten gibt. Jedoch liegt dem die Prämisse zugrunde, dass bei jedem Durchlaufen der Schleife eine andere Koordinate erzeugt wird; dies ist jedoch nicht zwangsweise der Fall, insofern kannst du das mit dem $i komplett streichen.

Damit die Funktion auch bei einer fast vollen Tabelle (also wenn fast alle Koordinaten besetzt sind) noch akzeptabel funktioniert, solltest du lieber ein Array mit allen noch freien Koordinaten erstellen und dann zufällig einen Index davon auswählen.
 
Da es insgesamt nur $sector · $citysector mögliche Kombinationen gibt, sollten auch nicht mehr Wiederholungen gemacht werden.
 
Das ist richtig, aber dass er dabei alle Möglichkeiten durchläuft, ist statistisch sehr unwahrscheinlich; wahrscheinlicher ist, dass manche Möglichkeiten mehrfach generiert werden.

Bei einer fast vollen Tabelle wird man also keine Koordinate erhalten, die noch frei ist, obwohl noch Koordinaten verfügbar sind.
 
Zurück