Spielerliste - zufällige Paarungen erzeugen
Bernd
- php
Hallo,
ich habe für unseren Verein eine Tabelle in MySQL mit den Spielernamen.
Diese Daten zeilenweise abzurufen habe ich hinbekommen(mit nem Beispiel aus dem Netz).
$z=mysql_query("SELECT id,spielername FROM turnier");
while($spieler=mysql_fetch_array($z))
{
if (empty($spieler[spielername])){
//do nothing
}else{
echo "$spieler[id] - $spieler[spielername] <br>";
}
}
Die Prüfung zwecks leeren Spielername ist nötig, da in der Tabelle auch reale Daten stehen und nicht jeder Spieler seinen "Spielernamen" eingetragen hat.
Ich möchte jedoch gern zufällige Spielerpaarungen erzeugen. Soll heißen: Wer spielt gegen wen?
Mit welchen Themen oder Funktionen sollte ich mich beschäftigen? Habt ihr evtl. ein paar, für den Laien verständliche. Ansätze oder Lösungen?
Vielen Dank.
Die Prüfung zwecks leeren Spielername ist nötig, da in der Tabelle auch reale Daten stehen und nicht jeder Spieler seinen "Spielernamen" eingetragen hat.
geht auch mit
$z=mysql_query("SELECT id,spielername FROM turnier WHERE spielername!=''");
Es gibt eine Funktion mit der du ein Zufalls Index Array erzeugst
http://de.php.net/function.array-rand
danach kannst du einfach durchgehen:
for(i=0;i<count(Array);i+=2){
Array[i] gegen Array[i+1]
}
Hallo,
Es gibt eine Funktion mit der du ein Zufalls Index Array erzeugst
http://de.php.net/function.array-randdanach kannst du einfach durchgehen:
for(i=0;i<count(Array);i+=2){
Array[i] gegen Array[i+1]
}
Vielen Dank für Deine Antwort. Irgend etwas habe ich noch missverstanden und mache es falsch.
Ich habe jetzt diesen Code "zusammengebastelt":
$z=mysql_query("SELECT id,spielername FROM turnier WHERE spielername!=''"); //Nur Spieler mit hinterlegtem Namen auswählen
while($spieler=mysql_fetch_array($z))
{
}
$paare = array_rand($spieler, 2);
for(i=0;i<count($paare);i+=2){
echo $paare[i]." gegen ".$paare[i+1];
}
Passieren tut nichts. Was mache ich falsch?
Vielen Dank
Probiere es mal so:
Ich habe jetzt diesen Code "zusammengebastelt":
$z=mysql_query("SELECT id,spielername FROM turnier WHERE spielername!=''"); //Nur Spieler mit hinterlegtem Namen auswählen
while($spieler=mysql_fetch_array($z))
{}
$paare = array_rand($spieler,count($spieler));
for($i=0;$i<count($paare);$i+=2){
echo $spieler[$paare[$i]]." gegen ".$spieler[$paare[$i+1]];
}
Probiere es mal so:
»» Ich habe jetzt diesen Code "zusammengebastelt":
»»
$spieler=array();
»» $z=mysql_query("SELECT id,spielername FROM turnier WHERE spielername!=''"); //Nur Spieler mit hinterlegtem Namen auswählen
while($spieler[]=mysql_fetch_array($z))
»» {
»»
»» }
$paare = array_rand($spieler,count($spieler));
for($i=0;$i<count($paare);$i+=2){
echo $spieler[$paare[$i]]." gegen ".$spieler[$paare[$i+1]];
}
Hallo,
» »» Probiere es mal so:
»»
»» »» Ich habe jetzt diesen Code "zusammengebastelt":
»» »»$spieler=array();
»» »» $z=mysql_query("SELECT id,spielername FROM turnier WHERE spielername!=''"); //Nur Spieler mit hinterlegtem Namen auswählen
while($spieler[]=mysql_fetch_array($z))
»» »» {
»» »»
»» »» }
»»
$paare = array_rand($spieler,count($spieler));
for($i=0;$i<count($paare);$i+=2){
echo $spieler[$paare[$i]]." gegen ".$spieler[$paare[$i+1]];
»» }
»»
Das sieht soweit gut aus. Zumindest hab ich jetzt keine weiße Seite mehr ;)
Aber ich erhalte als Ausgabe:
Array gegen ArrayArray gegen Array gegen ArrayArray gegen ArrayArray gegen ArrayArray gegen ArrayArray gegen ArrayArray gegen Array
Liegt das an dem
$spieler=array();
?
Vielen Dank
jo klar du hast jetzt ein array der datenbank zeile
du willst warscheinlich
$spieler[$paare[$i]]["spielername"]
Hallo,
jo klar du hast jetzt ein array der datenbank zeile
du willst warscheinlich
$spieler[$paare[$i]]["spielername"]
Ja genau. Ich wusste nicht, das ich so darauf zugreifen muss.
Hast Du evtl. eine Idee, wie ich das mit dem Spieler machen kann, der bei ungerader Zahl übrig bleibt?
Vielen dank erstmal für Deine bisherige Hilfe und natürlich auch Danke an die anderen Antwortgeber.
echo $begrüßung;
Ich möchte jedoch gern zufällige Spielerpaarungen erzeugen. Soll heißen: Wer spielt gegen wen?
"Sortiere" die Ergebnismenge nach Zufall (ORDER BY RAND()) und limitiere sie auf 2 (LIMIT 2).
echo "$verabschiedung $name";
Hallo,
»» Ich möchte jedoch gern zufällige Spielerpaarungen erzeugen. Soll heißen: Wer spielt gegen wen?
"Sortiere" die Ergebnismenge nach Zufall (ORDER BY RAND()) und limitiere sie auf 2 (LIMIT 2).
Es sind aber mehr als zwei Spieler vorgesehen und ich brauch die Werte später fest. So hätte ich bei jedem Durchgang wieder neue Pärchen.
Oder?
Grüße
echo $begrüßung;
» »» Ich möchte jedoch gern zufällige Spielerpaarungen erzeugen. Soll heißen: Wer spielt gegen wen?
» "Sortiere" die Ergebnismenge nach Zufall (ORDER BY RAND()) und limitiere sie auf 2 (LIMIT 2).
Es sind aber mehr als zwei Spieler vorgesehen und ich brauch die Werte später fest. So hätte ich bei jedem Durchgang wieder neue Pärchen.
Dazu kannst du die so ermittelten zwei Spieler (oder deren IDs) in eine Aufstellung der Paare übernehmen.
echo "$verabschiedung $name";
Hello,
»» Ich möchte jedoch gern zufällige Spielerpaarungen erzeugen. Soll heißen: Wer spielt gegen wen?
"Sortiere" die Ergebnismenge nach Zufall (ORDER BY RAND()) und limitiere sie auf 2 (LIMIT 2).
Es sind aber mehr als zwei Spieler vorgesehen und ich brauch die Werte später fest. So hätte ich bei jedem Durchgang wieder neue Pärchen.
Ja.
Und außerdem musst Du doch auch sicherstellen, dass die bereits gepaarten nicht nochmals gepaart werden.
Ich würde das anders machen: Eine weitere Tabelle bereitstellen für die Ziehungen
id ziehung id_spieler
1 1 22
2 1 11
3 1 1
4 1 25
5 1 40
6 1 13
7 2 11
8 2 33
. .
Diese Tabelle fütterst Du mit einer Abfrage aus der anderen mit
... Order by rand() limit $geradezahl
je nachdem, wieviele Paare Du aus der Gesamtmenge bilden willst.
Und nachher spilt dann immer
$offset+1 mit $offset+2
$offset+3 mit $offset+4
$offset+5 mit $offset+6
wobei $offset der Aufsetzpunkt in den IDs der Ziehungstabelle ist, also für di erste Ziehung 0, für die zweite Ziehung 7 usw.
Das Paare anzeigen lässt sich dann durch eine weitere Abfrage mit self-join erledigen
SO ist sichergestellt, dass die Ziehung dokumentiert ist und dass Du in einer Ziehung wirklich jeden Spieler-Datensatz nur einmal hast.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg