ich hoffe ihr könnt mir helfen. Ich versuche seit einigen Stunden eine mysql Abfrage hinzubekommen ohne wirklichen erfolg.
Ich hoffe ihr findet den Fehler (diesen werde ich weiter unten mit angeben)
SELECT `tabelle_mannschaft`.`name`, SUM (
IF
(`tabelle_begegnung`.`m1_id`=`tabelle_mannschaft`.`id`,
IF
(`tabelle_begegnung`.`m1_end`>`tabelle_begegnung`.`m2_end`,
3,
IF (`tabelle_begegnung`.`m1_end`<`tabelle_begegnung`.`m2_end`,0,1)
),
IF
(`tabelle_begegnung`.`m2_id`=`tabelle_mannschaft`.`id`,
IF
(`tabelle_begegnung`.`m2_end`>`tabelle_begegnung`.`m1_end`,
3,
IF (`tabelle_begegnung`.`m2_end`<`tabelle_begegnung`.`m1_end`,0,1)
)
)
)) AS `PUNKTE`
FROM `tabelle_mannschaft`, `tabelle_begegnung`
WHERE ((`tabelle_mannschaft`.`abgemeldet`=0) AND (`tabelle_begegnung`.`sid`=29) AND (`tabelle_begegnung`.`lid`=9) AND (`tabelle_begegnung`.`m1_id` Is Not Null) AND (`tabelle_begegnung`.`m2_id` Is Not Null) AND (`tabelle_begegnung`.`m1_end` Is Not Null) AND (`tabelle_begegnung`.`m2_end` Is Not Null))
GROUP BY `tabelle_mannschaft`.`name`
ORDER BY `PUNKTE` DESC;Folgende Fehlermeldung erhalten ich:
#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 ') )) AS `PUNKTE` FROM `tabelle_mannschaft`, `tabelle_begegnung` WHERE ((`tabel' at line 16Was möchte ich damit überhaupt bezwecken?
Es geht um eine Fußball Tabelle, die ich direkt aus mysql heraus „generieren“ möchte, ohne dass ich noch viele Abfragen in PHP abschicken muss. Derzeit läuft das alles mit zig mysql Abfragen und for schleifen im PHP code, was den code ätzend langsam macht. Das möchte ich nun versuchen zu optimieren in dem ich diese Tabelle auf der Datenbank seite generiere.
Ich hoffe ihr könnt helfen.
Solltet ihr noch weitere Fragen bezüglich des o.g. codes haben dann meldet euch einfach.
SELECT
tm.`name`,
SUM (
IF (
tb.`m1_id`=tm.`id`,
IF (
tb.`m1_end`>tb.`m2_end`,
3,
IF (
tb.`m1_end`<tb.`m2_end`,
0,
1
)
),
IF (
tb.`m2_id`=tm.`id`,
IF (
tb.`m2_end`>tb.`m1_end`,
3,
IF (
tb.`m2_end`<tb.`m1_end`,
0,
1
)
)
)
)
) AS `PUNKTE`
FROM
`tabelle_mannschaft` tm,
`tabelle_begegnung` tb
WHERE
(tm.`abgemeldet`=0)
AND (tb.`sid`=29)
AND (tb.`lid`=9)
AND (tb.`m1_id` Is Not Null)
AND (tb.`m2_id` Is Not Null)
AND (tb.`m1_end` Is Not Null)
AND (tb.`m2_end` Is Not Null)
GROUP BY
tm.`name`
ORDER BY
`PUNKTE` DESC
Beim vierten IF-„Statement“ von oben fehlt der ELSE-Fall, wenn ich das richtig sehe.
Irgendwie bezweifle ich, dass diese Vorgehensweise geschickt ist, denn die Regeln etwa bei Punktegleichstand können so kompliziert sein, dass du kaum ohne echte Logikprogrammierung auskommen wirst.
Mein Ansatz wäre es, mit ein oder zwei Queries alle Daten auszulesen und die Berechnungen komplett auf PHP-Seite zu erledigen.
Falls das zu Performanceproblemen führt, wäre eine Möglichkeit, die Ergebnisse zu cachen.
PS: Ich habe vor etlicher Zeit mal sowas angefangen. Funktioniert noch nicht toll (und enthält kein DB-Backend), aber falls du Inspiration suchst: mermshaus / eosamples / source — bitbucket.org
Die Regelungen bezüglich geschossene Tore, direkter Vergleich, Tordifferenz usw. sind mir bekannt. Jedoch mache ich es derzeit wie schon gesagt auf PHP Seite und habe enorme performance Probleme. Deswegen möchte ich es auf DB Seite mal versuchen, ob das schneller ist.
Ich bin die IF Abfragen schon etliche mal durchgegangen, aber jetzt werde ich es noch einmal machen
So. Hab dem noch ein ELSE zweig hinzugefügt und nun „geht es“ oder auch nicht… Bekomme eine neue Fehlermeldung, die mich zum kochen bringt… habe scheinbar stundenlang umsonst hier rum gemacht?