PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP hierfür geeignet?


faiZ
11.11.2004, 15:29:58
Hi,

ich habe folgendes Problem:

ich möchte aus einem Datenarchiv (alle bisherigen Bundesliga Ergebnisse) für einen beliebigen Faktor (zb. Heimvorteil =
20% größere Siegchance) die ganzen bisherigen Spiele durchrechnen lassen und nach 1,0,2 (also Heimsieg,Unentschieden, Auswärtssieg) einschätzen und dann mit den tatsächlich eingetroffen Resultaten vergleichen und als Ergebniss die Anzahl der richten Tipps erhalten.

Irgendwann soll das ganze zur Prognose zukünftiger Spiele führen.

Ist PHP für eine solche Anwendung geeignet? Oder sollte ich es besser mit etwas anderem versuchen. Habe keinerlei Progammiererfahrungen. HTML behersche ich allerdings, daher auch die Idee mit PHP.
Wäre dankbar für irgendwelche Ideen.

Grüsse, faiZ

c4
11.11.2004, 15:33:00
Jo, geht.

Tutorial:
--> http://tut.php-q.net/

Viel Spaß! :)

faiZ
12.11.2004, 18:40:21
ok habe mich mal versucht, leider schon bald auf die ersten Probleme gestoßen :/.

So sieht z.B. eine Datei zum einlesen aus:
01.08.03 20:30 FC Bayern München : Eintracht Frankfurt 3:1 (3:0)
02.08.03 15:30 Hertha BSC Berlin : Werder Bremen 0:3 (0:2)
02.08.03 15:30 VfL Wolfsburg : VfL Bochum 3:2 (2:2)
02.08.03 15:30 FC Schalke 04 : Borussia Dortmund 2:2 (1:0)
02.08.03 15:30 Hamburger SV : Hannover 96 0:3 (0:1)
02.08.03 15:30 Bayer 04 Leverkusen : SC Freiburg 4:1 (3:1)
02.08.03 15:30 1.FC Kaiserslautern : TSV 1860 München 0:1 (0:1)
03.08.03 17:30 Borussia M'gladbach : 1.FC Köln 1:0 (0:0)
03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)

bisheriger Ansatz:

<?PHP
$datei = "bundesliga2.txt";
$bundesliga = file($datei);
foreach ($bundesliga as $zeile) {
echo "$zeile <br>n";
}
?>

nun möchte ich aber Datum, Uhrzeit, Manschaftsnamen, Ergebniss usw. jeweils als einzelne Variablen haben, nicht die komplette Zeile. Wie könnte ich das machen?

Yzerman
12.11.2004, 20:14:16
Beispiel:


$zeile = "01.08.03 20:30 FC Bayern München : Eintracht Frankfurt 3:1 (3:0)";
$pattern = "#(d{2}.d{2}.d{2}) (d{2}:d{2}) ([w.' ]+?) : ([w.' ]+?) (d{1,2}):(d{1,2}) ((d{1,2}):(d{1,2}))#s";
preg_match($pattern,$zeile,$result);
echo 'Datum: ' . $result[1] . '<br />';
echo 'Zeit: ' . $result[2] . '<br />';
echo 'Heimmannschaft: ' . htmlentities($result[3]) . '<br />';
echo 'Ausw&auml;rtsmannschaft: ' . htmlentities($result[4]) . '<br />';
echo 'Tore Heim: ' . $result[5] . '<br />';
echo 'Tore Ausw: ' . $result[6] . '<br />';
echo 'Tore Heim Halbzeit: ' . $result[7] . '<br />';
echo 'Tore Ausw Halbzeit: ' . $result[8];


Es geht natürlich auch, die Zeile mit den Stringfunktionen zu zerlegen (substr und explode), würde aber mehrere Schritte benötigen. Stringfunktionen sind allerdings im Grunde performanter als Reguläre Ausdrücke.

faiZ
13.11.2004, 11:35:29
Hi, vielen Dank für die Hilfe.

Habe versucht den Code nachzuvollziehen, was mir nach einigem nachlesen auch größtenteils gelungen ist.

Wollte jetzt aber $zeile jeweils durch $bundesliga[1], $bundesliga[2] usw. ersetzen. Dies scheitert jedoch an einem "undefined offset error". Soweit ich das verstanden habe bedeutet das, dass der erhaltene Wert nicht dem erwarteten entspricht. Verstehe aber nicht ganz wieso, da ja echo die Zeilen auf diese Weise richtig ausgibt.
Wo liegt das Problem?

xabbuh
13.11.2004, 12:58:13
Original geschrieben von faiZ
Hi, vielen Dank für die Hilfe.

Habe versucht den Code nachzuvollziehen, was mir nach einigem nachlesen auch größtenteils gelungen ist.

Wollte jetzt aber $zeile jeweils durch $bundesliga[1], $bundesliga[2] usw. ersetzen. Dies scheitert jedoch an einem "undefined offset error". Soweit ich das verstanden habe bedeutet das, dass der erhaltene Wert nicht dem erwarteten entspricht. Verstehe aber nicht ganz wieso, da ja echo die Zeilen auf diese Weise richtig ausgibt.
Wo liegt das Problem?
Zeige mal den Quelltext, mit dem du es versucht hast.

faiZ
13.11.2004, 13:31:02
$datei = "bundesliga2.txt";
$bundesliga = file($datei);
$pattern = "#(d{2}.d{2}.d{2}) (d{2}:d{2}) ([w.' ]+?) : ([w.' ]+?) (d{1,2}):(d{1,2}) ((d{1,2}):(d{1,2}))#s";
preg_match($pattern,$bundesliga[5],$result);
echo 'Datum: ' . $result[1] . '<br />';
echo 'Zeit: ' . $result[2] . '<br />';
echo 'Heimmannschaft: ' . htmlentities($result[3]) . '<br />';
echo 'Auswärtsmannschaft: ' . htmlentities($result[4]) . '<br />';
echo 'Tore Heim: ' . $result[5] . '<br />';
echo 'Tore Ausw: ' . $result[6] . '<br />';
echo 'Tore Heim Halbzeit: ' . $result[7] . '<br />';
echo 'Tore Ausw Halbzeit: ' . $result[8];
echo "<br>";
echo "$bundesliga[5]";//wird korrekt angezeigt


und die Fehlermeldung:


Notice: Undefined offset: 1 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 6
Datum:

Notice: Undefined offset: 2 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 7
Zeit:

Notice: Undefined offset: 3 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 8
Heimmannschaft:

Notice: Undefined offset: 4 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 9
Auswärtsmannschaft:

Notice: Undefined offset: 5 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 10
Tore Heim:

Notice: Undefined offset: 6 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 11
Tore Ausw:

Notice: Undefined offset: 7 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 12
Tore Heim Halbzeit:

Notice: Undefined offset: 8 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 13
Tore Ausw Halbzeit:
02.08.03 15:30 Bayer 04 Leverkusen : SC Freiburg 4:1 (3:1)

xabbuh
13.11.2004, 13:51:46
Das Muster, nach welchem du suchen lässt, findet in deiner Zeile keine Ergebnisse.
Ich habe dir das mal überarbeitet:

$pattern = '#(d{2}.d{2}.d{2})s+(d{1,2}:d{2})s+(.+)s*:s*(.+)(d{1,2}):(d{1,2})s+((d {1,2}):(d{1,2}))#i';


EDIT: Wieso rutscht das Semikolon in die nächste Zeile?!

faiZ
13.11.2004, 14:27:18
Ich bin mir nicht sicher ob das Muster wirklich die Ursache des Problems ist.
Denn wenn ich mit $zeile = "03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)"; arbeite funktioniert das bisherige Muster wunderbar, wenn ich jedoch $zeile = "bundesliga[9];" setze tritt der offset Fehler auf.
Wenn ich das von dir erstellte Muster nehme tritt der Fehler in beiden Fällen auf :/

xabbuh
13.11.2004, 15:27:05
Original geschrieben von faiZ
Ich bin mir nicht sicher ob das Muster wirklich die Ursache des Problems ist.
Es liegt so gut wie sicher an dem Muster. Deine Warnung bedeutet ja nichts weiter, als das ein bestimmtes Element nicht in dem Array $result gefunden wurde. Dieses Array wird aber durch die Funktion preg_match erzeugt. Wenn das in preg_match angegebene Suchmuster nun nicht gefunden wurde, wird $result einfach als leeres Array zurückgegeben und liefert somit die Offset-Notiz.

wenn ich jedoch $zeile = "bundesliga[9];" setze tritt der offset Fehler auf.
Diese Zeile müsste wenn dann so aussehen:

<?php
$zeile = $bundesliga[9];
?>

Aber auch wenn du es so schreibst, wird dir ein Fehler zurückgeliefert werden, da das Array $bundesliga nur 9 Elemente (von 0 bis 8) hat.


Wenn ich das von dir erstellte Muster nehme tritt der Fehler in beiden Fällen auf :/
Folgende Zeile funktioniert bei meinem Muster ohne Probleme:

<?php
$zeile = "03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)";
?>

Yzerman
13.11.2004, 16:05:49
Mein Suchmuster funktionierte so, hatte ich vorher getestet. Wenn Du allerdings den Variablenname in Quotes setzt, ist es klar, dass es auf diesen String eben nichts findet.

Ich würde mir an Deiner Stelle vor den schwierigen Sachen erstmal die Grundlagen von PHP aneignen.

faiZ
13.11.2004, 16:07:06
Es liegt so gut wie sicher an dem Muster. Deine Warnung bedeutet ja nichts weiter, als das ein bestimmtes Element nicht in dem Array $result gefunden wurde. Dieses Array wird aber durch die Funktion preg_match erzeugt. Wenn das in preg_match angegebene Suchmuster nun nicht gefunden wurde, wird $result einfach als leeres Array zurückgegeben und liefert somit die Offset-Notiz.
Ja, das leuchtet mir schon ein. Ich verstehe nur nicht wieso
$zeile = $bundesliga[8]; nicht mit $zeile = "03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)"; identisch ist.

Folgende Zeile funktioniert bei meinem Muster ohne Probleme: PHP: <?php $zeile = "03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)"; ?>

Die funktioniert bei mir leider nicht.
Hier nochmal die momentane Situation zum Vergleich:

<?PHP
$datei = "bundesliga2.txt";
$bundesliga = file($datei);
$zeile = "03.08.03 17:30 Hansa Rostock : VfB Stuttgart 0:2 (0:0)";
$pattern = "#(d{2}.d{2}.d{2}) (d{2}:d{2}) ([w.' ]+?) : ([w.' ]+?) (d{1,2}):(d{1,2}) ((d{1,2}):(d{1,2}))#s";
$pattern2 = "#(d{2}.d{2}.d{2})s+(d{1,2}:d{2})s+(.+)s*:s*(. +)(d{1,2}):(d{1,2})s+((d{1,2}):(d{1,2}))#i";
preg_match($pattern,$zeile,$result);
echo 'Datum: ' . $result[1] . '<br />';
echo 'Zeit: ' . $result[2] . '<br />';
echo 'Heimmannschaft: ' . htmlentities($result[3]) . '<br />';
echo 'Auswärtsmannschaft: ' . htmlentities($result[4]) . '<br />';
echo 'Tore Heim: ' . $result[5] . '<br />';
echo 'Tore Ausw: ' . $result[6] . '<br />';
echo 'Tore Heim Halbzeit: ' . $result[7] . '<br />';
echo 'Tore Ausw Halbzeit: ' . $result[8];
echo '<p>';
preg_match($pattern2,$zeile,$result);
echo 'Datum: ' . $result[1] . '<br />';
echo 'Zeit: ' . $result[2] . '<br />';
echo 'Heimmannschaft: ' . htmlentities($result[3]) . '<br />';
echo 'Auswärtsmannschaft: ' . htmlentities($result[4]) . '<br />';
echo 'Tore Heim: ' . $result[5] . '<br />';
echo 'Tore Ausw: ' . $result[6] . '<br />';
echo 'Tore Heim Halbzeit: ' . $result[7] . '<br />';
echo 'Tore Ausw Halbzeit: ' . $result[8];
?>

ergibt bei mir:
Datum: 03.08.03
Zeit: 17:30
Heimmannschaft: Hansa Rostock
Auswärtsmannschaft: VfB Stuttgart
Tore Heim: 0
Tore Ausw: 2
Tore Heim Halbzeit: 0
Tore Ausw Halbzeit: 0


Notice: Undefined offset: 1 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 18
Datum:

Notice: Undefined offset: 2 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 19
Zeit:

Notice: Undefined offset: 3 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 20
Heimmannschaft:

Notice: Undefined offset: 4 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 21
Auswärtsmannschaft:

Notice: Undefined offset: 5 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 22
Tore Heim:

Notice: Undefined offset: 6 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 23
Tore Ausw:

Notice: Undefined offset: 7 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 24
Tore Heim Halbzeit:

Notice: Undefined offset: 8 in D:ProgrammeOmniSecurehtdocsprojektauslesen.php on line 25
Tore Ausw Halbzeit:

Yzerman
13.11.2004, 16:19:07
Das besagt, dass die erste Abfrage mit dem ersten Muster funktioniert und die zweite nicht. Dort wird nichts gefunden und daher macht er dann bei der Ausgabe mit den Fehlermeldungen weiter.

faiZ
13.11.2004, 16:33:19
Mein Suchmuster funktionierte so, hatte ich vorher getestet. Wenn Du allerdings den Variablenname in Quotes setzt, ist es klar, dass es auf diesen String eben nichts findet. Ich würde mir an Deiner Stelle vor den schwierigen Sachen erstmal die Grundlagen von PHP aneignen.
Nunja, mir geht es weniger um das Erlernen von PHP als das Lößen meines Problems.


Das besagt, dass die erste Abfrage mit dem ersten Muster funktioniert und die zweite nicht. Dort wird nichts gefunden und daher macht er dann bei der Ausgabe mit den Fehlermeldungen weiter.
Ja, nur xabbuh meinte ja es würde funktionieren.

xabbuh
13.11.2004, 16:34:36
Original geschrieben von faiZ
Die funktioniert bei mir leider nicht.
Die Leerzeichen bei (.+) (zwischen Punkt und Pluszeichen) sind nicht gewollt und werden anscheinend automatisch vom Forum hinzugefügt. Diese solltest du also am besten entfernen.


@Yzerman:
Dein Suchmuster ist an sich ja auch nicht verkehrt und funktioniert auch mit den von faiZ angegebenen Beispielen (entgegen meiner ersten Behauptung). Was machst du aber mit einem Verein, der einen Slash etc. im Namen hat?


EDIT:

Nunja, mir geht es weniger um das Erlernen von PHP als das Lößen meines Problems.
Du wirst deine Probleme wesentlich besser lösen können, wenn du PHP kannst.
-> Tutorial (http://tut.php-q.net)

faiZ
13.11.2004, 16:50:44
so,

es funktionieren nun beide Muster. Mein Problem war wirklich die Verwendung der "". Tut mir leid, dass ich euch beiden wegen so einer Lapalie so viel Arbeit gemacht habe. Ein großes Danke nochmal.
Ich werde trotzdem weiterhin meine Probleme hier posten, wenn das in Ordnung ist. Werde aber zumindest versuchen immer schon einen eigenen
Vorschlag zu liefern, damit ihr mir nicht alles vorkauen müsst.

Yzerman
13.11.2004, 17:46:30
Original geschrieben von xabbuh
@Yzerman:
Dein Suchmuster ist an sich ja auch nicht verkehrt und funktioniert auch mit den von faiZ angegebenen Beispielen (entgegen meiner ersten Behauptung). Was machst du aber mit einem Verein, der einen Slash etc. im Namen hat?

Bin jetzt bei meinem Muster nur von Zahlen, Buchstaben, Leerzeichen, dem Punkt und das Hochkomma ausgegangen.
Könnten noch weitere Zeichen vorkommen (die Umlaute hab ich bspw. auch vergessen ;-)) brauchen die einfach nur mit in die eckigen Klammern rein.
Aber das sind Feinheiten...

xabbuh
13.11.2004, 20:44:33
Original geschrieben von Yzerman
Bin jetzt bei meinem Muster nur von Zahlen, Buchstaben, Leerzeichen, dem Punkt und das Hochkomma ausgegangen.
Könnten noch weitere Zeichen vorkommen (die Umlaute hab ich bspw. auch vergessen ;-)) brauchen die einfach nur mit in die eckigen Klammern rein.
Aber das sind Feinheiten...
Deswegen eben gleich den Punkt ;-) In Vereinsnamen ist ja praktisch alles erlaubt.

faiZ
14.11.2004, 00:54:33
So bin wieder etwas weiter, und beim nächsten Problem ...


<?php
$anzahl_heimsieg = 0;
$anzahl_auswärtssieg = 0;
$anzahl_unentschieden = 0;
for ($i=0; $i<307; $i++)
{
$abfrage[$i] = mysql_query("SELECT * FROM saison9596 WHERE spiel = $i");
while ($test = mysql_fetch_array($abfrage[$i]))
{
$tore_heimmannschaft[$i] = $test["tore_heimmannschaft"];
$tore_auswärtsmannschaft[$i] = $test["tore_auswärtsmannschaft"];
if ($tore_heimmannschaft[$i] > $tore_auswärtsmannschaft[$i])
{
$anzahl_heimsieg++;
}
elseif ($tore_heimmannschaft[$i] < $tore_auswärtsmannschaft[$i])
{
$anzahl_auswärtssieg++;
}
elseif ($tore_heimmannschaft[$i] = $tore_auswärtsmannschaft[$i])
{
$anzahl_unentschieden++;
}
}

}
$ergebniss_heimsieg = round(($anzahl_heimsieg / 306) * 100 , 1);
$ergebniss_auswärtssieg = round(($anzahl_auswärtssieg / 306) * 100 , 1);
$ergebniss_unentschieden = round(($anzahl_unentschieden / 306) * 100 , 1);
echo "In der Saison 95/96 endeten $ergebniss_heimsieg % der Spiele mit Heimsieg, $ergebniss_auswärtssieg % mit Auswärtssieg und $ergebniss_unentschieden % mit Unentschieden.";

?>

Ausgabe: In der Saison 95/96 endeten 40.2 % der Spiele mit Heimsieg, 24.5 % mit Auswärtssieg und 26.8 % mit Unentschieden.

Irgendwas kann da nicht stimmen :/

yozek
14.11.2004, 01:44:36
Hab nur den Text durchgeflogen, aber die ELSEIF Anweisung ist falsch... EIn falscher Vergleichsoperator, bwz, keiner:

elseif ($tore_heimmannschaft[$i] = $tore_auswärtsmannschaft[$i])


Es muss so aussehen

elseif ($tore_heimmannschaft[$i] == $tore_auswärtsmannschaft[$i])


Das sollte helfen.. Versuchs mal..
Wie gesagt, hab mir den QUelltext nur flüchtig angeschaut

faiZ
14.11.2004, 01:52:19
In der Saison 95/96 endeten 40.2 % der Spiele mit Heimsieg, 24.5 % mit Auswärtssieg und 35.3 % mit Unentschieden.

Danke, daran lags :>

Yzerman
14.11.2004, 11:55:35
eigentlich hätte zum Schluss auch ein

...
else
{
$anzahl_unentschieden++
}
...

gereicht. Bleibt ja dann nur das Unentschieden übrig.

Auf die richtigen Prozentwerte hättest Du übrigens auch mit Deinem Fehler kommen müssen.
Hätte sich nur auf evtl. spätere Berechnungen ausgewirkt, da der Heimmannschaft die Tore der Auswärtsmannschaft zugewiesen wurden.

faiZ
14.11.2004, 19:00:16
und weiter gehts :>



<?php
for ($i=0; $i<10; $i++)
{
$abfrage[$i] = mysql_query("SELECT * FROM saison9596 WHERE spiel = $i");
while ($test = mysql_fetch_array($abfrage[$i]))
{
$heimmannschaft[$i] = $test["heimmannschaft"];
$auswärtsmannschaft[$i] = $test["auswärtsmannschaft"];
}

}
$mannschaft1 = $heimmannschaft[1];
$mannschaft2 = $auswärtsmannschaft[1];
$mannschaft3 = $heimmannschaft[2];
$mannschaft4 = $auswärtsmannschaft[2];
$mannschaft5 = $heimmannschaft[3];
$mannschaft6 = $auswärtsmannschaft[3];
$mannschaft7 = $heimmannschaft[4];
$mannschaft8 = $auswärtsmannschaft[4];
$mannschaft9 = $heimmannschaft[5];
$mannschaft10 = $auswärtsmannschaft[5];
$mannschaft11 = $heimmannschaft[6];
$mannschaft12 = $auswärtsmannschaft[6];
$mannschaft13 = $heimmannschaft[7];
$mannschaft14 = $auswärtsmannschaft[7];
$mannschaft15 = $heimmannschaft[8];
$mannschaft16 = $auswärtsmannschaft[8];
$mannschaft17 = $heimmannschaft[9];
$mannschaft18 = $auswärtsmannschaft[9];

$anzahl_sieg = 0;
$anzahl_niederlage = 0;
$anzahl_unentschieden = 0;


$abfrage2 = mysql_query("SELECT * FROM saison9596 WHERE heimmannschaft like '$mannschaft2' or auswärtsmannschaft like '$mannschaft2'");
while ($row = mysql_fetch_array($abfrage2))
{
if ($row["heimmannschaft"] == $mannschaft2)
{
$tore_team1 = $row["tore_heimmannschaft"];
$tore_team2 = $row["tore_auswärtsmannschaft"];
if ($tore_team1 > $tore_team2)
{
$anzahl_sieg++;
}
else
{
$anzahl_niederlage++;
}
}
if ($row["auswärtsmannschaft"] == $mannschaft2)
{
$tore_team1 = $row["tore_auswärtsmannschaft"];
$tore_team2 = $row["tore_heimmannschaft"];
if ($tore_team1 > $tore_team2)
{
$anzahl_sieg++;
}
else
{
$anzahl_niederlage++;
}
}
if ($tore_team1 == $tore_team2)
{
$anzahl_unentschieden++;
}
}

echo $anzahl_sieg . "<br>" . $anzahl_unentschieden . "<br>" . $anzahl_niederlage . "<br>";
$ergebniss_sieg = round(($anzahl_sieg / 34) * 100 , 1);
$ergebniss_niederlage = round(($anzahl_niederlage / 34) * 100 , 1);
$ergebniss_unentschieden = round(($anzahl_unentschieden / 34) * 100 ,1);
echo "In der Saison 95/96 gewann $mannschaft2 $ergebniss_sieg % der Spiele, verlor zu $ergebniss_niederlage % und $ergebniss_unentschieden % der endeten Unentschieden.";
?>


Siege und Uentschieden werden richtig berechnet, Niederlage ergibt jedoch einen falschen Wert.
Klar könnte ich es mir jetzt einfach machen, möchte aber doch gerne wissen was falsch ist.

xabbuh
14.11.2004, 20:21:21
Hallo,
erstmal ein paar Anmerkungen zu deinem Code:
- Spaltenbezeichnungen in MySQL sollten nur aus Buchstaben von A bis Z und aus Zahlen bestehen. Somit ist auswärtsmannschaft keine sonderlich gute Bezeichnung
- Warum verwendest du in deinem zweiten Query LIKE und nicht =?
- Warum soll ich nicht SELECT * schreiben? (http://www.php-faq.de/q/q-sql-select.html)
- Richtiges einrücken (http://tut.php-q.net/einruecken.html) fördert die Lesbarkeit des Quelltextes
- Rücke möglichst auch MySQL-Queries ein. (http://tut.php-q.net/mysql-einrueck.html)

Und nun zu deinem Problem:
Was passt denn an dem Ergebnis nicht?

faiZ
14.11.2004, 20:47:42
- Spaltenbezeichnungen in MySQL sollten nur aus Buchstaben von A bis Z und aus Zahlen bestehen. Somit ist auswärtsmannschaft keine sonderlich gute Bezeichnung
wann könnten Umlaute zu Problemen führen?


Warum verwendest du in deinem zweiten Query LIKE und nicht =?
Irgendwie hats mit = nicht hingehauen, keine Ahnung wieso.

- Warum soll ich nicht SELECT * schreiben?
Hatte ich schon gelesen, schien mir aber nicht relevant für mich.

- Richtiges einrücken fördert die Lesbarkeit des Quelltextes - Rücke möglichst auch MySQL-Queries ein.
Ja, war mir auch schon aufgefallen, versuche das zu verbessern.


Problem ist, dass er 8/16/26 (Siege/Uentschieden/Niederlagen) ausgibt, richtig aber 8/16/10 wäre.
Ist aber nicht so wichtig, bin inzwischen schon weiter, nur falls jemand Spass dran hat das auszuknobeln :>

xabbuh
14.11.2004, 21:55:27
Original geschrieben von faiZ
wann könnten Umlaute zu Problemen führen?
Es ist von MySQL vorgegeben, dass Spaltennamen nur Buchstaben von A bis Z und Zahlen enthalten dürfen. Inwiefern das zu Problemen führen kann, kann ich dir aber auch nicht sagen.

Hatte ich schon gelesen, schien mir aber nicht relevant für mich.
Dazu zitiere ich einfach mal ein paar Zeilen aus den FAQ:
die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden.

Problem ist, dass er 8/16/26 (Siege/Uentschieden/Niederlagen) ausgibt, richtig aber 8/16/10 wäre.
Ist aber nicht so wichtig, bin inzwischen schon weiter, nur falls jemand Spass dran hat das auszuknobeln :>
Wenn du mir die entsprechenden Datensätze als Dump zur Verfügung stellst, würde ich mir das gerne mal anschauen.

faiZ
14.11.2004, 23:16:04
die Tabelle nachträglich erweitert werden könnte, die neue(n) Spalte(n) (im worst case ein BLOB!) nach der Abfrage aber nicht gebraucht werden.
Was ist denn ein BLOB?


Wenn du mir die entsprechenden Datensätze als Dump zur Verfügung stellst, würde ich mir das gerne mal anschauen.
Würde ich gerne, wenn ich denn wüsste was ein Dump ist :>

xabbuh
14.11.2004, 23:24:05
Original geschrieben von faiZ
Was ist denn ein BLOB?

Ein BLOB ist großes Binärobjekt (Binary Large OBject), das eine variable Menge von Daten enthalten kann.
Quelle: MySQL Manual (http://dev.mysql.com/doc/mysql/de/BLOB.html)

Würde ich gerne, wenn ich denn wüsste was ein Dump ist :>

Ein Dump ist praktisch eine Sicherung der MySQL-Tabelle. Diese kannst du beispielsweise über phpMyAdmin erstellen.
-> Dump - Wikipedia (http://de.wikipedia.org/wiki/Dump)

faiZ
14.11.2004, 23:43:27
Habe, das was ich für den dump halte an deine email geschickt, war zu lang zum posten.

faiZ
15.11.2004, 03:02:03
Momentaner Stand:


<?php
for ($i=0; $i<10; $i++) {
$abfrage[$i] = mysql_query("SELECT
*
FROM
saison9596
WHERE spiel = $i");
while ($test = mysql_fetch_array($abfrage[$i])) {
$heimmannschaft[$i] = $test["heimmannschaft"];
$auswärtsmannschaft[$i] = $test["auswärtsmannschaft"];
}
}

$mannschaft = array($heimmannschaft[1], $auswärtsmannschaft[1], $heimmannschaft[2], $auswärtsmannschaft[2],
$heimmannschaft[3], $auswärtsmannschaft[3], $heimmannschaft[4], $auswärtsmannschaft[4],
$heimmannschaft[5], $auswärtsmannschaft[5], $heimmannschaft[6], $auswärtsmannschaft[6],
$heimmannschaft[7], $auswärtsmannschaft[7], $heimmannschaft[8], $auswärtsmannschaft[8],
$heimmannschaft[9], $auswärtsmannschaft[9]);

$zwei_siege = "";
for($m=0;$m<18;$m++) {
$array_heim = array();
$array_auswärts = array();
$array_tore_heim = array();
$array_tore_auswärts = array();

$abfrage = mysql_query("SELECT
*
FROM
saison9596
WHERE
heimmannschaft = '$mannschaft[$m]' or auswärtsmannschaft = '$mannschaft[$m]'");

while ($row = mysql_fetch_array($abfrage)) {
$heimmannschaft = $row["heimmannschaft"];
$auswärtsmannschaft = $row["auswärtsmannschaft"];
$tore_heimmannschaft = $row["tore_heimmannschaft"];
$tore_auswärtsmannschaft = $row["tore_auswärtsmannschaft"];
array_push($array_heim, "$heimmannschaft");
array_push($array_auswärts, "$auswärtsmannschaft");
array_push($array_tore_heim, "$tore_heimmannschaft");
array_push($array_tore_auswärts, "$tore_auswärtsmannschaft");
}
for($x=0;$x<34;$x++) {
if ($array_tore_heim[$x] > $array_tore_auswärts[$x]) {
$sieger[$x] = 1;
}
elseif ($array_tore_heim[$x] < $array_tore_auswärts[$x]) {
$sieger[$x] = 2;
}
else {
$sieger[$x] = 3;
}
}

for($x=0;$x<33;$x++) {
if ($sieger[$x] == 1 and $array_heim[$x] == $mannschaft[$m] and $sieger[$x+1] == 2 and $array_auswärts[$x+1] == $mannschaft[$m]) {
$zwei_siege++;
}
if ($sieger[$x] == 2 and $array_auswärts[$x] == $mannschaft[$m] and $sieger[$x+1] == 1 and $array_heim[$x+1] == $mannschaft[$m]) {
$zwei_siege++;
}
}
}
echo $zwei_siege;
?>


Soll die Anzahl der Fälle in denen zwei Spiele in Folge gewonnen wurden ausgeben, bin mir aber nicht sicher ob das wirklich der Fall ist :(.

faiZ
15.11.2004, 19:31:19
Das mit der Anzahl scheint hinzuhauen, habe ein paar von Hand nachgerechnet.

Nun wollte ich die Daten auswerten, was ich leider absolut nicht hinbekomme.

Vorgestellt hatte ich es mir ungefähr so:

$korrekt = "";
for($j=1;$j<307;$j++) {
$abfrage2[$j] = mysql_query("SELECT
*
FROM
saison9596
WHERE spiel = $j");
while ($row = mysql_fetch_array($abfrage2[$j])) {
$tore_heimmannschaft[$j] = $row["tore_heimmannschaft"];
$tore_auswärtsmannschaft[$j] = $row["tore_auswärtsmannschaft"];
}
if ($tore_heimmannschaft[$j] > $tore_auswärtsmannschaft[$j]) {
$spiel[$j] = 1;
}
elseif ($tore_heimmannschaft[$j] < $tore_auswärtsmannschaft[$j]) {
$spiel[$j] = 2;
}
else {
$spiel[$j] = 0;
}
$rating_team1 = 100;
$rating_team2 = 100;

if ($rating_team1 > $rating_team2) {
$prognose[$j] = 1;
}
elseif ($rating_team1 < $rating_team2) {
$prognose[$j] = 2;
}
else {
$prognose[$j] = 0;
}

if ($prognose[$j] == $spiel[$j]) {
$korrekt++;
}
}
$resultat = round(($korrekt / 306) * 100 , 1);
echo "$resultat% der Prognosen waren korrekt!";

wobei $rating_team natürlich nicht so definiert werden sollte.
Ich habe es mit $rating_team[$m][$x+2] versucht.
Also Rating[beliebigesTeam][Spieltag_nach_2_gewonnen_Spielen].

also etwa:

for($x=0;$x<33;$x++) {
if ($sieger[$x] == 1 and $array_heim[$x] == $mannschaft[$m] and $sieger[$x+1] == 2 and $array_auswärts[$x+1] == $mannschaft[$m]) {
$rating_team[$m][$x+2] = 110;

}
if ($sieger[$x] == 2 and $array_auswärts[$x] == $mannschaft[$m] and $sieger[$x+1] == 1 and $array_heim[$x+1] == $mannschaft[$m]) {
$rating_team[$m][$x+2] = 110;

}
else {
$rating_team[$m][$x+2] = 100;
}

Habs aber nicht geschafft, dass irgendwie einzubauen. Außerhalb der Schleife ist $x+2 undefined offset und innerhalb wirds mehrmals ausgeführt.

Irgendjemand eine Idee wie ich also ein beliebiges Spiel vorhersagen und dann mit dem tatsächlich eingetroffenen Resultat vergleichen kann?