Auslesen von Werten aus SQL-DB & Kombination per Zufallsprinzip

Das Forum hier bekommt jetzt nen Platz unter meinen Favoriten!

Und WENN ich denn soweit bin, dass ich gut in allem drin bin, dann zahle ich das gern auch mit Hilfe meinerseits zurück. ich werde mich bemühen!

VIELEN DANK! :-)
 
Sorry, dass ich nochmal stören muss ... ABER.

Ich habe noch etwas gefunden, was nicht passieren darf ... Bei dem Script gibt es ja keine Überprüfung, ob das erstellte Match schon vorhanden ist ...

Gibts ne Möglichkeit das auch überprüfen zu lassen?! Wie das bei nem Array gehen soll ist ne sehr gute Frage ... Wie ich ein Array nach einem bestimmten Wert durchsuche ist klar ... aber wichtig wäre ja zu wissen ob die Zeile schon existiert ... Und hierbei natürlich ... was passiert wenn ja? Weil in dem Moment ist der Zähler ja einen Schritt weiter und der Wert aus dem Array geschnitten ... mh!
 
Zuletzt bearbeitet:
Ich mach mir Morgen mal gedanken. Klingt aber nicht besonders kompliziert.
Was du noch vergessen hast, dass jede Manschaft gleich viel mal das hteam ist....
 
Also, dass jedes Team genau so viel Heim- wie Auswärtsspiele hat, habe ich theor. schon gelöst, indem ich jedes match in umgekehrter Variante mit Spieltag + 7 eintrage. Dann legt er mir quasi ein umgekehrtes Array parallel an, was ich dann ebenfalls in die DB eintrage. So habe ich automatisch Hin- und Rückrunde.

PHP:
$matchSqls[] = "('{$spieltag}','{$saisonid}','{$ligaid}','{$hteam}','{$ateam}')"; // Hinrunde
$spieltag2 = $spieltag + 7;
$matchSqls2[] = "('{$spieltag2}','{$saisonid}','{$ligaid}','{$ateam}','{$hteam}')"; // Rückrunde

Naja ... leider noch kein Filter, dass eben der sql eintrag erst DANN erstellt wird, wenn das Match im Array wirklich einmalig ist ... Man könnte wahrscheinlich irgendwie mit array_splice etc rumspielen. Aber dann haut das mit dem Zähler ja nicht mehr hin und endet in einer Endlosschleife (wenn ich Pech habe) .. ? Mh.

Ich bin auf deine Idee gespannt. Bis jetzt hast du mir ja super weitergeholfen! :-)
 
So, hier mal mein Vorschlag
PHP:
/**
 * Funktion um den Cach-Wert eines Matches zu generieren
 * @param $hteam    String  Name des Heimteams
 * @param $ateam    String  Name des Auswertsteams
 * @return          String  Cach-Wert team###team
 */
function createMatchCachEntry($hteam,$ateam){
    return MIN($hteam,$ateam).'###'.MAX($ateam,$hteam);
}

//Settings
$saisonid = 1;
$ligaid = 1;
$anzSpielTage = 3;
$anzSpielePerTag = 4;

//Array mit allen Teams erstellen
$sql = "select * from team where ligaid = {$ligaid}";
$result = mysql_query($sql);
while($team = mysql_fetch_array($result)){
    $teams[] = $team['vereinsname'];
}

//Cach für alle Matches, damit kein Match 2 mal vorkommt
$cachMatches = array();
//Jeden Spieltag durchgehen
for($spieltag = 1; $spieltag <= $anzSpielTage; $spieltag++){
    //Teams neu mischen
    shuffle($teams);
    //Eine Kopie der Teams anlegen (array_shift() nimmt jeweils ein Eintrag aus dem Array heraus, 
    //ergo die Kopie wird immer kleiner
    $teamsCopy = $teams;
    
    //$anzSpielePerTag oder weniger Spiele (wenn zu wenig Manschaften vorhanden sind) aussuchen
    for($i=0; $i < min($anzSpielePerTag, floor(count($teams)/2)); $i++){
        //Schleife ohne Bedinung starten
        do{
            $hteam = array_shift($teamsCopy);
            $ateam = array_shift($teamsCopy);
            //Falls der Match bereits im Cach ist...
            if(in_array(createMatchCachEntry($hteam,$ateam), $cachMatches)){
                //.. die 2 Teams wieder zurückgeben und alles kräftig schütteln
                array_push($teamsCopy, $hteam, $ateam);
                shuffle($teams);
            }else{
                //Wenn der Match noch nicht im Cach ist
                //Schleife verlassen
                break;
            }
        } while(0);
        //Den Match fürs SQL vorbereiten
        $matchSqls[] = "('{$spieltag}','{$saisonid}','{$ligaid}','{$hteam}','{$ateam}')";
        //Den Match in den Cach laden
        $cachMatches[] = createMatchCachEntry($hteam,$ateam);
    }
}
//Die Matches mit einem einzigen DB-Zugriff eintragen
$sql = "INSERT INTO spieltage ('spieltag','saisonid','ligaid','hteam','ateam') VALUES ".implode(',', $matchSqls);
mysql_query($sql);
 
Hm ... Wenn ich mir den query ausgeben lasse, steht genau das drin, was ich will ... ABER wenn ich den query AUSFÜHRE passiert nix. mysql_error ergibt Folgendes:

Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''spieltag','saisonid','ligaid','hteam','ateam') VALUES ('1','1','1','Hamburger S' at line 1

Aber die Syntax ist doch richtig?!

Hier das, was im query steht ....

PHP:
INSERT INTO spieltage ('spieltag','saisonid','ligaid','hteam','ateam') VALUES ('1','1','1','Eintracht Frankfurt','Schalke 04'),('1','1','1','SV Werder Bremen','VFL Wolfsburg'),('1','1','1','Bayer 04 Leverkusen','Hamburger SV'),('1','1','1','VfB Stuttgart','Bayern München'),('2','1','1','Schalke 04','VFL Wolfsburg'),('2','1','1','SV Werder Bremen','VfB Stuttgart'),('2','1','1','Bayer 04 Leverkusen','Eintracht Frankfurt'),('2','1','1','Bayern München','Hamburger SV'),('3','1','1','Schalke 04','Bayern München'),('3','1','1','VfB Stuttgart','Eintracht Frankfurt'),('3','1','1','Bayer 04 Leverkusen','Hamburger SV'),('3','1','1','SV Werder Bremen','VFL Wolfsburg'),('4','1','1','Eintracht Frankfurt','VfB Stuttgart'),('4','1','1','Hamburger SV','SV Werder Bremen'),('4','1','1','Bayer 04 Leverkusen','Schalke 04'),('4','1','1','Bayern München','VFL Wolfsburg'),('5','1','1','Bayer 04 Leverkusen','Hamburger SV'),('5','1','1','Bayern München','Schalke 04'),('5','1','1','Eintracht Frankfurt','VFL Wolfsburg'),('5','1','1','SV Werder Bremen','VfB Stuttgart'),('6','1','1','Eintracht Frankfurt','VFL Wolfsburg'),('6','1','1','VfB Stuttgart','Bayer 04 Leverkusen'),('6','1','1','Schalke 04','SV Werder Bremen'),('6','1','1','Hamburger SV','Bayern München'),('7','1','1','Bayer 04 Leverkusen','VFL Wolfsburg'),('7','1','1','VfB Stuttgart','SV Werder Bremen'),('7','1','1','Hamburger SV','Schalke 04'),('7','1','1','Eintracht Frankfurt','Bayern München')
(sorry für die Unübersichtlichkeit ...


Aber es ist ja richtig, nur meckert SQL jetzt auf einmal UNVERSTÄNDLICHERWEISE?

Irgendwie schneidet er bei der Übergabe zu SQL die Werte ab? Wenn ich es per Echo ausgebe (siehe oben), dann ist alles perfekt ... wenn ich es einfüge, dann bricht er mittendrin ab (sieht man ja auch, wie er mitten im vereinsnamen abbricht).
 
Zuletzt bearbeitet:
Sind die Felder spieltag, saisonid und ligaid Strings oder integer-Felder?
Wenns Integer sind, dann lass die ' bei den Werten weg.

Hier habe ich noch ein interessanter Link zum testen von Queries die in PHP zusammengestiefelt werden
PHP MySQL Debug Queries
 
Hm hab es jetzt mit '' und ohne '' probiert ... auch bei phpmyadmin ...

Immer der selbe Fehler:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''spieltag','saisonid','ligaid','hteam','ateam') VALUES (1,1,1,'VFL Wol' at line 1

Er schneidet den Befehl einfach ab ... Mitten im hteam oder ateam ... einfach so .... .... Verstehe das nicht ... soll ich die Tabelle vllt. mal neu anlegen? wobei die eig korrekt ist
 
Zurück