3 Stimmen

INNER JOIN verwenden, um gekreuzte Daten nach Datumsbereich zu erhalten

Ich habe eine Themengalerie. Im Dashboard muss ich die am meisten angesehenen Themen nach Datum anzeigen (heute, die letzten 7 Tage, die letzten 30 Tage, alle Zeiten).

Dies sind die 2 beteiligten Tabellen:

  1. Thema
    • id_theme
    • Titel
  2. Ansichten
    • id_ansicht
    • id_theme
    • Datum

El $Zeitstempel Werte werden mit mktime() berechnet (kein Problem darin).

Dies ist meine aktuelle SQL-Abfrage:

 SELECT t.id_theme,t.title,
        (SELECT COUNT(*)
        FROM views
        WHERE views.id_theme=t.id_theme
        AND views.date BETWEEN '.$timestamp1.' AND '.$timestamp2.')
 AS q
 FROM theme AS t
 INNER JOIN views ON t.id_theme = views.id_theme
 GROUP BY views.id_theme
 ORDER BY q 
 DESC LIMIT 10

Das Problem ist, dass der Haken ist, dass er manchmal Themen mit 0 Ansichten erhält, und das sollte nicht passieren. Ich habe versucht, den INNER JOIN durch RIGHT JOIN zu ersetzen, ohne Ergebnis. Irgendwelche Ideen?

0voto

kevev22 Punkte 3707
 SELECT t.id_theme, t.title, COUNT(*) AS q
 FROM theme AS t
 INNER JOIN views ON t.id_theme = views.id_theme 
    AND views.date BETWEEN '.$timestamp1.' AND '.$timestamp2.'
 GROUP BY t.id_theme, t.title
 ORDER BY q 
 DESC LIMIT 10

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X