| 

.NET C# Java Javascript Exception

1
Moin allerseits.

Ich habe eine Tabelle, in der Namen, Links und Zeitstempel gespeichert werden. Mit dieser Tabelle liefere ich in meiner Applikation eine Liste der häufigsten Aufrufe aus. Das Problem ist: der Name dieser Links ändert sich von Zeit zu Zeit. Ich will aber den aktuellen Namen haben. Momentan lautet mein Aufruf:
SELECT name,link,COUNT(link) AS klicks FROM history GROUP BY link ORDER BY klicks DESC, timestamp DESC

D.h. erst wird nach links gruppiert, dann sortiert. Logisch, dass als Name der Name verwendet wird, der zu erst in der Tabelle auftaucht. Ich will aber, dass vor dem Gruppieren die Tabelle nach timestamp absteigend sortiert wird, dann Gruppiert und in der Ausgabe nach klicks absteigend sortiert wird.

Wie geht das?
News:
05.08.2011
Gast
11 1 2
2 Antworten
1
Ich bin mir gerade nicht 100% sicher, ob das klappen wird, aber probiers einfach mal aus:

SELECT * AS klicks FROM (SELECT name,link,COUNT(link) FROM history ORDER BY timestamp DESC) AS tmptbl GROUP BY link ORDER BY klicks DESC;
05.08.2011
muffi 1,4k 1 9
SELECT name, link, COUNT( link ) AS klicks, timestamp FROM (SELECT name, link, timestamp FROM history ORDER BY `timestamp` DESC) AS tmptbl GROUP BY link ORDER BY klicks DESC , timestamp DESC

So lautet der richtige Ausdruck. Du darfst nicht * AS klicks verwenden.
johny7 08.08.2011
1
Probier das:
SELECT 
name
,link
,COUNT(link) AS klicks
FROM
history
GROUP BY
name
,link
ORDER BY
timestamp DESC -- erste Sortierung
,klicks DESC -- zweite Sortierung


timestamp
muss zuerst aufgelistet werden:
05.08.2011
FrankHell 223 1 7
Ich hab jetzt gerade kein MySQL zur Hand, aber mE müssen die Felder nach denen sortiert werden soll auch in der Group By Klausel vorkommen. Ebenso die, die im SELECT vorkommen.
– Gast 05.08.2011
Stimmt: Alle Spalten, auf die keine Aggregatfunktion gesetzt wird, müssen im GROUP auftauchen. Sortiert darf nach allen Spalten in der Tabelle, auch wenn sie nicht im SELECT-Part sind.
FrankHell 06.08.2011

Stelle deine Mysql-Frage jetzt!