Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

mysql abfrage mit if?

Empfohlene Antworten

Veröffentlicht

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

leider hat der server nur die mysql 4...

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

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!

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.

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

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

wow. da bin ich ja mal gespannt. ich werde das nächste woche mal ausprobieren.

vielen dank!

sehr geil. wirklich! damit komme ich hin

"if" hatte ich echt noch nicht gekannt in mysql.

danke!

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.