SQL - Mehrfacheinträge nach Häufigkeit ausgeben

Bitte den Fehler auch posten, sonst wirds schwer.

Ganz andere Frage: Welche Datenbank steckt da überhaupt dahinter?
 
Du willst also eine List von Namen, sortiert nach der Anzahl ihrer Vorkommen, und davon dann die 50 mit den meisten Einträgen? Hab ich das jetzt richtig mitbekommen?

Warum willst du dann nach der ID sortieren? Es gibt ja immer mehrere IDs zu jedem Namen, nach welcher wolltest du dann überhaupt sortieren?


ich will von meinen verkauften Produkten die meistverkauften rausfiltern, jedoch nur der letzten 50 Id´s. War das verständlich?

Also ich möchte zb. nicht das ein Produkt ewig an erster Stelle liegt, sondern eben nur zum aktuellen Zeitpunkt ein gut verkauftes Produkt.
 
Hi,

ich habs nun probiert und bekomm immer nen Error:

dann solltest Du auch den Fehler posten und nicht die Abfrage, die kennen wir doch schon...

Ich orakel mal einen "every derived table must have its own alias" oder so ähnlich.

Also gibst Du der Subquery einfach mal einen Alias:

Code:
SELECT name, COUNT(id) AS c FROM
   (SELECT name, id FROM tabelle ORDER BY id DESC LIMIT 50) t
   GROUP BY name
   ORDER BY c DESC

LG
 
Hi,



dann solltest Du auch den Fehler posten und nicht die Abfrage, die kennen wir doch schon...

Ich orakel mal einen "every derived table must have its own alias" oder so ähnlich.

Also gibst Du der Subquery einfach mal einen Alias:

Code:
SELECT name, COUNT(id) AS c FROM
   (SELECT name, id FROM tabelle ORDER BY id DESC LIMIT 50) t
   GROUP BY name
   ORDER BY c DESC

LG

ein Stinknormaler Fehler: supplied argument is not a valid MySQL result resource

Also, als wär die syntax in der Select Abfrage falsch oder der Tabellenname.
 
Hi,



dann lies mal den entsprechenden Abschnitt im Handbuch. Das ist wie gesagt ein Alias.

LG

ah danke, alles klar.

Ein anliegen hätt ich noch....
Kann ich eventuell 50 Datensätze abfragen aber nur wo c>1 ist? (Also nur Produkte, wo mehr als eines Verkauft wurde)
Also etwas so:
Code:
SELECT *, COUNT(id) as c 
FROM (SELECT * FROM orderedprod 
ORDER by id DESC LIMIT 50)t  
WHERE c>1
GROUP by name ORDER by c
 
Hi,

das macht man nicht mit WHERE sondern mit einer HAVING-Kausel. Aber ehrlich mal, erweitere Deine Tabelle um einen Timestamp! Das wird doch nur Murks so. Wenn mal ein Produkt durch eine Werbeaktion 200 Mal innerhalb kürzerer Zeit bestellt wird, liefert Deine Abfrage mit etwas Pech (die 50 letzten Einträge gehören alle zu diesem Produkt) auch nur dieses zurück. Wenn Du einen Timestamp in der Tabelle hast, kannst Du eine einfache gruppierte Abfrage (ohne Subquery) mit Einschränkung auf meinetwegen die letzten 2 Monate schreiben und dafür eine LIMIT-Klausel setzen. Dann bekommst Du auch wirklich genau die 50 beliebtesten Produkte der letzten 2 Monate (falls in diesem Zeitraum so viel verschiedene bestellt wurden).

LG
 

Neue Beiträge

Zurück