PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die 10 größten Werte nach ID sortiert ausgeben?


CRaSH3k
26.06.2009, 22:56:03
Hallo,

ich habe folgende Frage:

Ich habe 2 Tabellen.
Die erste Tabelle (Tags) enthält die Spalten ID und name.
Die zweite Tabelle (Titel) enthält unter anderem die Felder Tag_ID und Titel.

Wie kann ich nun die 10 am häufigsten zugeordneten Tags ausgeben, die Ausgabe
selbst aber nach Tags.ID sortieren?

Ich möchte also diese Abfrage:

SELECT
t1.id, t1.name,
COUNT(t2.tag_id) AS anzahl
FROM
tags AS t1
LEFT JOIN
titel AS t2
ON
t2.tag_id = t1.id
GROUP BY
t1.id
ORDER BY
COUNT(t2.tag_id) DESC
LIMIT
10

sortiert nach t1.id augegeben bekommen, aber dennoch
die 10 Datensätze mit dem größten COUNT-Wert erhalten.


Wäre wirklich klasse, wenn da jemand Rat weiß!



Gruß,
CRaSH3k

Indyk
29.06.2009, 09:24:56
SELECT
t1.id, t1.name,
COUNT(t2.tag_id) AS anzahl
FROM
tags AS t1
LEFT JOIN
titel AS t2
ON
t2.tag_id = t1.id
GROUP BY
t1.id
ORDER BY
COUNT(t2.tag_id) DESC,
t1.id
LIMIT
10

CRaSH3k
02.07.2009, 19:36:12
Danke für deine Antwort,
aber dies würde ja nur funktionieren, wenn "COUNT(t2.tag_id)"
bei den ausgegebenen Zeilen überall gleich groß ist.
Dies ist aber leider nicht der Fall.

Crisps
03.07.2009, 08:05:49
Wenn ich das richtig verstanden hab, sollte diese Abfrage das gewünschte Resultat anzeigen:
SELECT *
FROM (SELECT t1.id
, t1.name
, COUNT(t2.tag_id) AS anzahl
FROM tags AS t1
LEFT OUTER
JOIN titel AS t2
ON t2.tag_id = t1.id
GROUP
BY t1.id
ORDER
BY COUNT(t2.tag_id) DESC
LIMIT 10) AS s
ORDER
BY s.anzahl DESC
, s.id ASC;
Das Ergebnis der Hauptabfrage wird also noch einmal nach anzahl und id sortiert.

*Edit: Oder willst du das Ergebnis der "Top 10" nach id sortieren, ohne Rücksicht auf die vorherige Anzahl des Count-Wertes? Wenn das der Fall wäre, müsste man nur das rot markierte löschen.