Ich habe 1 Tabelle mit Artikeln gefüllt. Für den Zweck dieses Posts, sagen wir einfach, es hat 4 Felder. story_id, story_title, story_numyes, story_numnoWas ist der beste Weg, zeitbasierte Sortierung in PHP/MySQL zu implementieren?
Jeder Artikel kann mit JA oder NEIN gewählt werden. Ich speichere jede Bewertung in einer anderen Tabelle, die 3 Felder enthält: vote_storyid, vote_date (als Zeitstempel), vote_code (1 = ja, 0 = nein).
Wenn also jemand in einem Artikel "Ja" wählt, führt er eine Aktualisierungsabfrage nach story_numyes + 1 sowie eine Einfügeabfrage durch, um die Story-ID, das Datum und den vote_code in der zweiten Tabelle zu protokollieren.
Ich möchte Artikel basierend darauf sortieren, wie viele JA oder NEIN Stimmen es hat. Für "Bester aller Zeiten" ist die Bewertung offensichtlich einfach ... ORDER BY story_numyes DESC.
Aber wie würde ich heute, diese Woche, diesen Monat, die besten/schlechtesten Artikel machen?
bekomme ich die Zeitstempel, die Stichtag für jeden Zeitraum über folgende markieren:
$yesterday= strtotime("yesterday");
$last_week = strtotime("last week");
$last_month = strtotime("last month");
Aber Ich bin nicht sicher, wie diese Zeitstempel in einer MySQL-Abfrage zu verwenden, um die gewünschten Ergebnisse zu erzielen.
Ich versuche, mich von Unterabfragen fernzuhalten, um die CPU-Last zu minimieren. Keine Möglichkeit, dies in einem Schritt zu tun? –
Die Art der Unterabfrage, von der Sie sich fernhalten möchten, ist eine korrelierte Unterabfrage, was dies nicht ist. Aber sicher, Sie können einfach ORDER BY setzen, indem Sie DESC am Ende zählen. Aber Sie können nur eine als primäre Reihenfolge wählen. – dkretz
Und wenn Sie "All time" möchten, dann müssen Sie die Monatszahl mit CASE verlängern und die Datumsbeschränkung im WHERE entfernen (was sehr teuer sein wird). – dkretz