MYSQL - Sortieren mit Joins

switchkill

Grünschnabel
Hi!
Also ich hab keine Ahnung ob das überhaupt so ähnlich funktioniert.

Ich möchte Daten der Tabelle1 sortieren. Diese möchte ich aber nach der Tabelle2 sortieren. In Tabelle 2 werden Einträge gespeichert, die mit Tabelle1 verknüpft sind.

Also in Tabelle1 sind Autos gespeichert (name, farbe etc).
Möchte ein Benutzer für ein Auto voten, wird das in Tabelle 2 gespeichert mit dem Schlüsselverweis auf Tabelle1.

Jetzt möchte ich die Autos vorne anzeigen, für die meisten einträge in tabelle 2 gespeichert sind.

Habs aus Spaß mal mit folgender Anfrage probiert:

SELECT * FROM `autos` JOIN toplist ORDER by (COUNT(toplist.id) WHERE toplist.autoid = auto.id)

Vielen Dank für Vorschläge....
 
Ich denke, so müsste es gehen:
SQL:
SELECT
    `a`.`name`,
    COUNT(`t`.`hits`)
    FROM
        `autos` `a`
    LEFT JOIN
        `toplist` `t` ON `t`.`autoid` = `a`.`id`
    GROUP BY
        `t`.`autoid`
    ORDER BY
        `t`.`hits`
 
Nein, leider funktioniert es noch nicht :(

Das Problem ist, dass es in Tabelle 2 nicht eine Zeile gibt wo die Hits einfach hochgezählt werden, sondern dass für jeden Vote eine neue Zeile angelegt wird.

Das bedeutet, dass sozusagen erst alle Zeilen in Tabelle 2 gezählt werden müssen welche die gleiche gameid haben. Das Ergebnis gibt dann die Anzahl der Votes. Danach möchte ich die Tabelle 1 genau nach dieser Anzahl sortieren...

Also in Tabelle 1 steht:

id | name |
1 | Ford Bla |
2 | Ford Blup |


in Tabelle 2

id | autoid |
1 | 1
2 | 1
3 | 1
4 | 2

Somit wurde 3 mal für Ford Bla gevotet und einmal für Ford Blup.
Also soll später zuerst Ford Bla, danach Ford Blup ausgegeben werden ( da mehr Stimmen).
 
So klappt es bei mir, gerade getestet:
SQL:
SELECT
    `c`.`name`,
    COUNT(`h`.`id`) AS `hits`
    FROM
        `cars` `c`
    LEFT JOIN
        `hits` `h` ON `h`.`car_id` = `c`.`id`
    GROUP BY
        `h`.`car_id`
    ORDER BY
        `hits` DESC

Du bekommst erst pro Vote einen Eintrag mit dem Autonamen und der Voteid. Diese Gruppierst du dann nach der Autoid in der Votetabelle und ermittelst eben mittels COUNT die Anzahl der Datensätze. Danach wird dann auch sortiert (ORDER BY `hits` DESC).
 
Zurück