Einzelne Daten von Tabelle zu Tabelle kopieren

Walther

Grünschnabel
Hallo,
Ich habe eine Tabelle Namens Mannschaft(12 einträge). Diese ist wie folgt aufgebaut:
ID---NAME---LAND---GOALS---WON---LOST---GLEICH

Und eine Tabelle namens Spieltage:

ID---SPIELTAG---DATE---HEIM---GEGNER---TORE HEIM---TORE GEGNER

So nun möchte ich die Tabelle Spieltage mit den Daten der Tabelle Mannschaft füllen, so dass jede mannschaft einmal gegen jeden spielt aber nie gegen sich selber.

Ich habe mir gedacht, die Tabelle dann mit 12 schleifen zu füllen, die wie folgt funktionieren sollen:

PHP:
$i = 1;
do {
$i++;
$eintrag = "INSERT INTO spieltage (id, Spieltag, date, Heim, Gegner, Tore Heim, Tore Gegner) VALUES ('id', '1', NOW(), 'Mannschaft auf ID1 von der anderen Tabelle', 'Mannschaft von ID$i der anderen Tabelle','0','0')";
$eintragen = mysql_query($eintrag) or die(mysql_error());

} while ($i == 12);

Also das ganze soll so funktionieren:

Die Schleife läuft solange, bis ich als Spieltag eins 12 mal die Mannschaft der ID1 habe und dann jeweils jede andere Mannschaft einmal also halt mit der ID$i wobei $i ja bei jedem durchlauf um eins erhöht wird.

Wie kann ich das jedoch machen, dass er die Mannschaft nimmt, die auf der ID1 liegt oder halt auf ID$i ?

Die restlichen Spiele wollte ich halt mit neuen Schleifen einfügen.
 
Für ein Hin-und Rückrundensystem gibt es einen extra Algorythmus, wie es bei einem 1-Rundensystem aussieht kann ich dir nicht genau sagen. Aber ich denke nicht das du es rein mit SQL lösen kannst, sondern hierfür den Spielplan mit PHP erstellst und diesen danach in die DB schreibst.
 
Ich würde es folgendermaßen machen:
Du hast wie du schon richtig gesagt hast 12 Schleifen, wahrscheinlich werden es am Ende aber auch nur 11 sein. Jetzt generierst du für die erste Mannschaft alle Spieltage durch. Du merkst dir, die ID der ersten Mannschafst und fügst sie einem Array hinzu. Jetzt kommt die zweie Schleife die jetzt für die Zweite Mannschaft. Wieder generierst du alle Spieltage, bis auf den Spieltag für die erste Mannschaft. Diese Information muss dann in den Array stehen. Ich bin mir nichtmal sicher ob du soviele Schleifen brauchst oder doch nur zwei ineinandergeschaltelte Schleifen, die äußere um das Array hochzuzählen und die zweite um die Spieltage zu generieren. Ist interessant, ich versuche ich da morgen auch mal dran.
 
Hab ENDLICH die erste Schleife zum laufen gebracht:
PHP:
$result = mysql_query ('SELECT name FROM mannschaft WHERE id=1');
$row = mysql_fetch_array($result);

$i=1;
while($i < 12){
$i++;
echo $i;
$result1 = mysql_query ("SELECT name FROM mannschaft WHERE id='$i'");
$aa = mysql_fetch_array($result1);
$eintrag = "INSERT INTO spieltage (id, Spieltag, date, Heim, Gegner, ToreHeim, ToreGegner) VALUES ('id', '1', NOW(), '$row[0]', '$aa[0]','0','0')";
$eintragen = mysql_query($eintrag) or die(mysql_error());
}
Nicht über die Variablen Namen wundern wie $aa ^^. Wird später geändert :/. Schaue später mal, ob es jetzt so klappt, wenn ich für alles eine Schleife mache und vielleicht kann man das ganze ja mit weniger Schleifen optimieren ;) . Bin jetzt mal schlafen :D
 
Nicht über die Variablen Namen wundern wie $aa ^^. Wird später geändert :/.

Bei uns in der Firma ist es eine Todessünde wenn du Variablen auch bei einem Test so bennenst und dann erklärst diese später zu ändern. Ich kenne es von mir selber, die Variable habe ich dann doch an drei anderen stellen verwandt und keine Lust mehr sie zu ändern. Ergo: Sofort sprechenende Variablen-Namen.

Zurück zum Code:
Du benutzt hier eine While schleife, obwohl für dein Probleme eine For-Schleife viel Eleganter wäre. Weiterhin willst du wirklich 12 Schleifen bauen ? Das ist sehr umständlich, geht unheimlich auf die Performance. Außerdem: Was passiert wenn es mal mehr als 12 Mannschaften werden? Dann musst du an den Quellcode und das ist nicht wünschenswert.
 
Genau das mit der dynamik habe ich mir auch gedacht, und deshalb habe ich jetzt alles in zwei Schleifen gepackt(for schleife, Danke ;) )
Das ganze sieht nun so aus, jedoch liefert es nicht das gewünschte Ergebniss...

PHP:
for ($quit = 1,$id = 1; $quit <= 12; $quit++, $id++) {
	$heim_abfrage = mysql_query ("SELECT name FROM mannschaft WHERE id='$id'");
	$heim = mysql_fetch_array($heim_abfrage);
	
		for ($i = 1; $i <= 12; $i++) {
		$i++;
		$gegner_abfrage = mysql_query ("SELECT name FROM mannschaft WHERE id='$i'");
		$gegner = mysql_fetch_array($gegner_abfrage);
		$eintrag = "INSERT INTO spieltage (id, Spieltag, date, Heim, Gegner, ToreHeim, ToreGegner) VALUES ('id', '$quit', NOW(), '$heim[0]', 								'$gegner[0]','0','0')";
		$eintragen = mysql_query($eintrag) or die(mysql_error());
		
		}
}
 
UPDATE:

Funktioniert nun. Sorry wenn ich nicht so die Array-Konventionen eingehalten habe, aber damit hatte ich jetzt noch kaum berührungspunkte. Jetzt muss ich mal schauen, wie ich das mit den Spieltagen hinbekomme.

UPDATE2:
Jetzt auch mit funktionierenden Spieltagen :)

PHP:
<?php

include "db_con.php";
$current_home = array();

$select_teams = "Select id, mannschaft from mannschaften";

$select_fetch = mysql_query($select_teams);

$anzahl_mannschaften = mysql_num_rows($select_fetch);

for ($i = 1;$i <= $anzahl_mannschaften;$i++){
$spieltage = 1;
$select_home = "Select id, mannschaft from mannschaften where id='$i'";

$home_fetch = mysql_query($select_home);

$data = mysql_fetch_array($home_fetch);

$home = $data["id"];

$current_home[$i] = $home;


for ($j = 1;$j <= $anzahl_mannschaften;$j++){

if ($current_home[$j] == $j){



}

else {



$select_away = "Select id, mannschaft from mannschaften where id='$j'";

$away_fetch = mysql_query($select_away);

$data_away = mysql_fetch_array($away_fetch);

$away = $data_away["id"];



echo "Spieltag ".$spieltage.": ".$data["id"]." - ".$data_away["id"]."</br>";
$spieltage++;
}
}


}
?>
 
Zuletzt bearbeitet:
Zurück