forTeesSake Geschrieben 12. Januar 2005 Teilen Geschrieben 12. Januar 2005 hi und hallo. ich möchte gerne eine fussballtabelle in php ausgeben. der clou daran soll sein, dass ich alle berechnungen schon im sql statement ausführe weil ich keine lust auf mehrere abfagen, oder php arrays habe. ich habe die tabelle spieltag die folgender massen aussieht: idSpieltag mannschaftsIDHome mannschaftsIDAway homeGoals awayGoals und die mannschaftstabelle id mannschaftsName kein wort über meine deutschEnglisch mix-technik so, und nun brauche ich ein sql-statement das folgendes macht: - für jede mannschaft - die tabelle spieltag durchgehen - bestimmen ob die mannschaft gewonnen hat (mehr tore als das andere team [vorsicht: heim/auswärts in welcher spalte steht die mannschaft???])ODER ob es ein unentschieden ist (gleiche anzahl tore beider mannschaften) - wenn die mannschaft gewonnen hat -> zu ihren "temporären" punkten 3 dazuzählen, wenn unentschieden dann 1 punkt dazu zählen - tore auch dazuzählen/abziehen - das ganze nach zuerst nach punkten, dann toren, dann siegen, dann unentschieden sortiert liefern puhh, da krampft mein gehirn irgendwann. vielleicht gibt es irgendwelche mysql befehle die ich nicht kenne die die ganze sache ganz trivial machen, oder geht es evtl. überhaupt nicht??? vielen dank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bmg4ever Geschrieben 12. Januar 2005 Teilen Geschrieben 12. Januar 2005 wie wärs denn mit ner stored precedure: http://dev.mysql.com/doc/mysql/en/Stored_Procedures.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 13. Januar 2005 Autor Teilen Geschrieben 13. Januar 2005 leider hat der server nur die mysql 4... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bmg4ever Geschrieben 13. Januar 2005 Teilen Geschrieben 13. Januar 2005 dann bleibt dir in mysql wohl nix anderes übrig, als ein php- oder anderes Skript für diese Auswertung zu schreiben, dass dann eine andere Tabelle der Datenbank immer entsprechend updatet. Auch wenn die das vielleicht nicht gefällt, fält mir sonst nix besseres ein. weil ich keine lust auf mehrere abfagen, oder php arrays habe. kannst ja mal bei deinem provider nachhacken, ob eventuell ein update auf mysql 5 vorgesehen ist Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 13. Januar 2005 Autor Teilen Geschrieben 13. Januar 2005 schade, aber natürlich ok. dachte nur daran das ganz elegant und einfach zu machen... beim provider dauerts leider noch laaaaange bis der mal umstellt. vielen dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 13. Januar 2005 Teilen Geschrieben 13. Januar 2005 puhh, da krampft mein gehirn irgendwann. vielleicht gibt es irgendwelche mysql befehle die ich nicht kenne die die ganze sache ganz trivial machen, oder geht es evtl. überhaupt nicht??? Also es gibt die SQL Anweisung CASE, die interessant sein könnte für dich. ausserdem gibt es in MySQL die Möglichkeit Variablen zu nutzen und diese in aufeinanderfolgenden SQL-Statements (mit ';' getrennt) zu verwenden. Ich find das im Moment nicht mehr, aber zu Variablen hab ich hier schonmal ne Antwort geschrieben irgendwo (da war ein Link zur Doku dabei). Kannst ja mal danach suchen. In einer SQL-Abfrage ist dein Problem nicht zu lösen, aber mit mehreren und den Variablen könnte es vielleicht gehen. Oder zumindest so, dass das Ergebnis schon fast das Ergebnis ist, was du willst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 14. Januar 2005 Teilen Geschrieben 14. Januar 2005 Hallo zusammen, ich wär mir da nicht so sicher, ob man die Sache nicht doch in eine SQL-Abfrage packen kann. Ich kenn mich leider mit MySQL zu wenig aus, aber wenn man CASE und IF-Funktionen verschachteln kann, dann könnte ich mir das evtl. schon vorstellen... Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 14. Januar 2005 Teilen Geschrieben 14. Januar 2005 Hier mein Vorschlag (ungetestet!): select m.mannschaftsName , count(*) anzahl_spieltage , sum(if (m.id = s.mannschaftsIdHome, if (s.homeGoals > s.awayGoals,3, if(s.homeGoals = s.awayGoals,1,0)), if (s.awayGoals > s.homeGoals, 3, if(s.awayGoals = s.homeGoals,1,0))) as punkte , sum(if (m.id = s.mannschaftsIdHome, s.homeGoals-s.awayGoals, s.awayGoals - s.homeGoals)) as torverhaeltnis from mannschaften m, spieltage s where m.id = s.mannschaftsIDHome or m.id = s.mannschaftsIdAway group by m.mannschaftsname order by 3,4 Ich glaube, zumindest von der Logik her müsste das passen. Die Sortierung nach gewonnenen Spielen, etc. hab ich jetzt mal weggelassen. Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 15. Januar 2005 Autor Teilen Geschrieben 15. Januar 2005 wow. da bin ich ja mal gespannt. ich werde das nächste woche mal ausprobieren. vielen dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 17. Januar 2005 Autor Teilen Geschrieben 17. Januar 2005 sehr geil. wirklich! damit komme ich hin "if" hatte ich echt noch nicht gekannt in mysql. danke! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 19. Januar 2005 Teilen Geschrieben 19. Januar 2005 sehr geil. wirklich! damit komme ich hin "if" hatte ich echt noch nicht gekannt in mysql. danke! Wenn du mehr als nur 2 Fälle abdecken willst kann du in SQL auch mit einem CASE WHEN - Konstrukt arbeiten. Dies ist ähnlich einem "Switch Statement" http://dev.mysql.com/doc/mysql/en/CASE_Statement.html Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 20. Januar 2005 Autor Teilen Geschrieben 20. Januar 2005 ok, möchte hier gerne noch die getestete version veröffentlichen, damit endlich mal was fertiges zum thema im netz steht. ein paar umstände drin, aber ich habs immer gern ein bisschen ausführlicher. p.s. count as spieltage stimmt noch nicht, denn die spieltage müssen ja pro mannschaft angezeigt werden. eine mannschaft kann ja auch erst 6 spieltage haben während die andere 7 hat, aber dazu komme ich heute und die nächsten tage erstmal nicht ansonsten: SELECT m.mannschaftsName , count(*) as spieltage , sum( if (m.mannschaftsID = s.homeID, if (s.homeGoals > s.awayGoals,3, if(s.homeGoals = s.awayGoals,1,0)), 0) + if (m.mannschaftsID = s.awayID, if (s.homeGoals < s.awayGoals,3, if(s.homeGoals = s.awayGoals,1,0)), 0) ) as punkte , sum(if (m.mannschaftsID = s.homeID, s.homeGoals-s.awayGoals,0)) + sum(if (m.mannschaftsID = s.awayID, s.awayGoals-s.homeGoals,0)) as torverhaeltnis, sum(if (m.mannschaftsID = s.homeID, s.homeGoals,0)) + sum(if (m.mannschaftsID = s.awayID, s.awayGoals,0)) as torePlus, sum(if (m.mannschaftsID = s.homeID, s.awayGoals,0)) + sum(if (m.mannschaftsID = s.awayID, s.homeGoals,0)) as toreMinus, sum( if (m.mannschaftsID = s.homeID, if (s.homeGoals > s.awayGoals,1, 0), 0)) + sum(if (m.mannschaftsID = s.awayID, if (s.homeGoals < s.awayGoals,1, 0), 0)) as gewonnen, sum( if (m.mannschaftsID = s.homeID, if (s.homeGoals < s.awayGoals,1, 0), 0)) + sum(if (m.mannschaftsID = s.awayID, if (s.homeGoals > s.awayGoals,1, 0), 0)) as verloren, sum( if (m.mannschaftsID = s.homeID, if (s.homeGoals = s.awayGoals,1, 0), 0)) + sum(if (m.mannschaftsID = s.awayID, if (s.homeGoals = s.awayGoals,1, 0), 0)) as unentschieden from tbl_mannschaften m, tbl_spielplan s group by m.mannschaftsname vieln dank nochmal an axlHammer!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.