2016-04-20 10 views
0

Also schreibe ich eine Abfrage, um Daten aus der Datenbank auszuwählen und in einer Reihenfolge der Beliebtheit anzuzeigen. Ich verstehe, dass dies einfach genug ist zu tun, wenn es nur durch etwas wie ORDER BY numLikes DESC oder etwas bestellt wurde, aber in diesem Fall möchte ich den Inhalt von numLikes und datePosted bestellen.Komplexe SQL-Abfrage - Populärer Inhalt

Wie würde ich den Inhalt so sortieren, dass der oberste Inhalt ab dem heutigen Datum angezeigt wird? Wenn es rein durch numLikes sortiert wird, würde der oberste Inhalt nach oben schweben und dort bleiben. Ich möchte, dass diese Inhalte täglich sortiert werden. Dies ermöglicht ein System, in dem der Benutzer beliebte Posts vom vergangenen Tag, vergangenen Woche, vergangenen Monat und alle Top-Posts auswählen kann.

Könnte dies durch eine einzige SQL-Abfrage geschehen? Müsste eine SQL-Multi-Abfrage durchgeführt werden? Ist SQL mächtig genug, um dies zu tun, oder ist PHP erforderlich, um eine Rolle zu spielen?

Danke!

+2

Sie können dies mit der Bestellung durch. Ich kann nicht wirklich einen Vorschlag machen, weil es nichts zu arbeiten gibt. Keine Tabellen, keine Daten, keine Geschäftsregeln. Was definiert einen "Top Post"? Für "heute" sollte es ziemlich einfach sein. where datePosted> dateadd (Tag, -1, konvertieren (Datum, getdate())) order by numLikes. Sie können für alle anderen Zeiträume die gleiche Datumsbereichslogik verwenden. –

+1

Bitte fügen Sie ein Beispiel Ihrer Daten und was Sie erwarten als Ausgabe. –

Antwort

2

Sie müssen nur nach datePosted zuerst und dann nach numLikes sortieren. Etwas auf den folgenden Zeilen:

SELECT * FROM tableName ORDER BY datePosted, numLikes DESC 

Wenn Sie Top-Post zwischen einem bestimmten Bereich möchten, können Sie tun:

SELECT TOP 1 * FROM tableName 
WHERE datePosted BETWEEN [MinDate] AND [MaxDate] 
ORDER BY datePosted, numLikes DESC 

Ersetzen Sie [MinDate] und [MaxDate] mit den Daten, die Sie benötigen, zum Beispiel für die letzte Woche wären sie so etwas wie der 14. April und der 20. April.

+0

Ihre Abfrage führte dazu, dass die Daten nach Datum sortiert wurden und keine Auswirkungen auf die 'numLikes' hatten. –

+0

@RyanCastle: Siehe meine Bearbeitung. – dotNET

+0

'SELECT * FROM tabellenname ORDER BY datePosted DESC, numLikes DESC' hat ein weiteres DESC hinzugefügt, um es heute an die Spitze zu setzen ... –