Zum Inhalt springen

mysql abfrage mit if?


forTeesSake

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...