Komplexe Abfrage aus mehreren Tabellen (MySQL 5.0)

Kipperlenny

Erfahrenes Mitglied
Moin

Ich glaube dieser Forenteil passt besser als PHP...
Ich habe in einer Tabelle verschiedene Städtenamen gespeichert:

--ID--Name--User
---1--Köln---------2
---2--Bonn--------7
.
.
.

Das als Beispiel (die Tabelle hat 50 Einträge). Dann habe ich eine Tabelle wo alle User drin stehen:

--ID--Name--Stadt--Punkt1--Punkt2--Punkt3
---1--Ich-------------1-------20---------30-----------0
---2--Du-------------1-------10----------20---------10
.
.
.

Die User haben verschiedene Städte und verschiedene Punkte bei den Punkten.

Ich möchte nun eine Rangliste erstellen in der alle Städte aufgelistet sind, geordnet nach der Anzahl der Punkte (Punkt1, Punkt2, Punkt3) die alle User dieser Stadt zusammen haben.

Und da bin ich mit meinem Latein am Ende :-(
Mir fehlt auch einfach der Lösungsansatz: Temporäre Tabelle? While Schleifen? Left Join?


Ich hoffe mal ihr könnt mir helfen...

mfg
lenny
PS: MySQL 5.0 mit PHP 4.3
 
Probier mal folgende Abfrage:
Code:
SELECT
        `stadt`.`Name`,
        SUM(`user`.`Punkt1` + `user`.`Punkt2` + `user`.`Punkt3`) AS `Punkte`
  FROM
        `user`
  LEFT JOIN
        `stadt` ON `user`.`stadt` = `stadt`.`ID`
  GROUP BY
        `user`.`Stadt`
  ORDER BY
        `Punkte` DESC
 
Die spalte user in der tabelle mit den städten kannst du dir schenken, wieviele user in einer stadt wohnen kannst du mit einer 2. query abfragen, ansonsten müsstest du dieses feld ja immer updaten wenn ein user hinzukommt, wenn er umzieht und sein profil ändert musst du wieder 2 datensätze anfassen.

Code:
select stadt.Name, count(user.ID) as users from stadt left join user on (stadt.ID=user.stadt) group by user.stadt order by users DESC;

Marcus
 
nee die Spalte User brauche ich für was anderes :-)
Ich werde die Abfrage gleich mal ausprobieren sobald mein Laptop es geschafft hat meine ganzen Programmier-Programme, Xampp etc. zu starten...
 
Zurück