PHP Liga Tabelle

thejoyride

Grünschnabel
Hallo,

bin bei der erstellung einer Ligatabelle (eigenes Fifa Turnier).

Soweit klappt auch alles recht gut nur bei der Sortierung der Tabelle macht er mir noch schwierigkeiten. Hab mir schon folgenden Thread angeschaut (http://www.tutorials.de/relationale-datenbanksysteme/135132-ausgabe-nach-spaltensumme-sortieren.html) jedoch komme ich einfach nicht weiter.

Habe eine Tabelle (spiele), dort werden alle Ergebnisse eingetragen. Diese Tabelle hat die Felder:

id, saison, turnierrunde, spiel, team1, team2, toreteam1, toreteam2, punkteteam1, punkteteam2, timestamp

Die Felder saison und turnierrunde spielen erstmal keine rolle. punkteteam1und punkteteam2 werden beim Insert anhand der Tore automatisch eingetragen.

ich bring es nun einfach nicht auf die reihe, dass ich nach punkten und tordifferenz (welche ich in php berechnen lasse) sortieren.

kann mir hier irgendwer weiterhelfen?

vielen dank vorab.
 
Hi

also nach Differenz toreteam1-toreteam2 (oder umgekehrt),
und falls da Gleiche Werte sind, dann die noch nach Punktedifferenz ordner?

Da muss man kein PHP bemühen.
SQL:
select
    spiel,
    team1,
    team2,
    abs(toreteam1 - toreteam2),
    abs(punkteteam1 - punkteteam2)
from
    spiele
order by 4,5;

Gruß
 
Hey,

habe hiermal die Tabelle hochgeladen.

http://s1.directupload.net/file/d/2998/ihvmfvgg_png.htm

Ich versteh deinen Ansatz.

punkteteam1 - punkteteam2 macht keinen Sinn, da ich ja die Punkte jeweils zusammenzählen möchte. denke hier an diese richtung.

Code:
sum(punkteteam1) + sum(punkteteam2) where team1 = 1 OR team2 = 1

Ich möchte ja von den jeweiligen team alle punkte zusammenzählen und das selbe mit tore und gegentore (welches ich über eine abfrage von toreteam1 und toreteam2 mache). man muss immer beachten, dass team a einmal heimmanschaft ist und einmal auswärts spielt.

wie man in der tabelle sieht, soll er nur ligaspiele berücksichtigen.
 
Zuletzt bearbeitet:
oder damit du beim Ergänzen von weiteren Feldern nicht aus versehen nach dem falschen sortierst
SQL:
SELECT
    spiel,
    team1,
    team2,
    abs(toreteam1 - toreteam2),
    abs(punkteteam1 - punkteteam2)
FROM
    spiele
ORDER BY
    abs(toreteam1 - toreteam2),
    abs(punkteteam1 - punkteteam2)
;
 
Zuletzt bearbeitet von einem Moderator:
kann auch gerne den link zu der webseite schicken (möchte ich hier nicht public posten), dann kann man es sich ggf. besser vorstellen.
 
Brauche ich nicht.

Eher sowas von dir. Ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Code:
Tabelle spiele
id | saison     | turnier | spiel   | team1	| team2	| toreteam1 | toreteam2	| punkteteam1 | punkteteam2
--------------------------------------------------------------------------------------------------------------------------------------
1  | 2012/13  | 1	   | Liga	| 1	        | 2	        | 2	            | 2		| 1	                | 1
2  | 2012/13  | 1	   | Liga	| 3	        | 4	        | 2	            | 0		| 3	                | 0
3  | 2012/13  | 1	   | Liga	| 5	        | 1	        | 0	            | 3		| 0	                | 3
4  | 2012/13  | 1	   | Liga	| 2	        | 3	        | 3	            | 3		| 1	                | 1
5  | 2012/13  | 1	   | Liga	| 4	        | 5	        | 2	            | 2		| 1	                | 1
6  | 2012/13  | 1	   | Liga	| 1	        | 3	        | 2	            | 1		| 3	                | 0


Tabelle team
id | name
---------------------
1  | Tottenham Hotspur
2  | FC Bayern München
3  | Manchester City
4  | AC Mailand
5  | Paris St. Germain


Platz	| team_id	| name	 		        | spiele | siege  | unentschieden | niederlagen  | tore  | gegentore | tordifferenz | punkte
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
1   	| 1   		| Tottenham Hotspur	| 3	     | 2	 | 1		            | 0		   | 7       | 3	         | 4		       | 7
2      | 3		| Manchester City	        | 3	     | 1	 | 1		            | 1		   | 6	      | 5	         | 1 	               | 4
3      | 2		| FC Bayern München	| 2	     | 0	 | 2		            | 0		   | 5       | 5	         | 0		       | 2	
4      | 4		| AC Mailand		        | 2	     | 0	 | 1		            | 1		   | 2	      | 4	         | -2	               | 1
5      | 5		| Paris St. Germain	        | 2	     | 0	 | 1		            | 1		   | 2	      | 5	         | -3	               | 1
 
Aso, du willst also nicht die Match auswerten sondern das pro Team zusammentragen

Als erstes mit einem UNION mal das Zeug mit Nummer 1 und 2 beseitigen. So hast du die Punkte rechenbar.
SQL:
SELECT
	team1 AS team,
	toreteam1 AS tore,
	punkteteam1 AS punkte
FROM
	spiele
UNION ALL
SELECT
	team2 AS team,
	toreteam2 AS tore,
	punkteteam2 AS punkte
FROM
	spiele

Dann och ein GROUP BY drüber
SQL:
SELECT
	team,
	SUM(tore) AS sum_tore,
	SUM(punkte) AS sum_punkte
FROM
	(
		SELECT
			team1 AS team,
			toreteam1 AS tore,
			punkteteam1 AS punkte
		FROM
			spiele
		UNION ALL
		SELECT
			team2 AS team,
			toreteam2 AS tore,
			punkteteam2 AS punkte
		FROM
			spiele
	) AS normalized_spiele
GROUP BY
	team
ORDER BY
	SUM(punkte) DESC,
	SUM(tore) DESC
;

Jetzt mit einem normalen JOIN noch die Infos aus der Tabelle team anhängen und fertig

PS: Das Resultat sieht dann so aus
Code:
team | sum_tore | sum_punkte 
----------------------------
1    | 7        | 7 
3    | 6        | 4 
2    | 5        | 2 
5    | 2        | 1 
4    | 2        | 1
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich das so mache, habe ich dann kein Problem mit der Tordifferenz zu berechnen? Klar ich kann auf der einen Seite leicht die Tore und Punkte zusammenzählne, aber bei Gegentore und Tordifferenz tu ich mich auf der anderen Seite somit schwer.
 
Kannst du einfach im UNION schon mal vorbereiten und im GROUP BY dann aufsummieren
SQL:
SELECT
	team1 AS team,
	toreteam1 AS tore,
	punkteteam1 AS punkte,
	toreteam2 AS gegentore,
	toreteam1 - toreteam2 AS torediffernez
FROM
	spiele
UNION ALL
SELECT
	team2 AS team,
	toreteam2 AS tore,
	punkteteam2 AS punkte,
	toreteam1 AS gegentore,
	toreteam2 - toreteam1 AS torediffernez
FROM
	spiele
 
Zuletzt bearbeitet von einem Moderator:
Zurück