2016-07-15 2 views
0

Ich habe eine Tabelle wie folgt aussieht:

id | date  | count 
----------------------- 
1 | 2016-07-13 | 2 
2 | 2016-07-13 | 3 
3 | 2016-07-13 | 1 
4 | 2016-07-15 | 12 
5 | 2016-07-15 | 1 
6 | 2016-07-15 | 4 

Diese meine Frage ist

$test_query = $wpdb->get_results(" 
    SELECT 
    SUM(count) AS count, 
    date 
    FROM 
    ".$wpdb->prefix."statistics 
    WHERE 
    date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' 
    GROUP BY DATE(date) 
"); 

ich die Abfrage ausführen, um die Ergebnisse zu erhalten

2016-07-13 | 6 
2016-07-15 | 17 

Das funktioniert gut, nur ich habe ein Intervall für 3 Tage und die Ergebnisse aus dem Datum 2016-07-14 wird nicht angezeigt. Ich verwende ein Diagramm, wo der Wert leer oder 0 sein muss.

Gibt es eine Möglichkeit, dass 2016-07-14 Wert 0 ist?

2016-07-13 | 6 
2016-07-14 | 0 
2016-07-15 | 17 
+0

Wenn Sie nicht das Datum "2016-07-14" in Ihrer Tabelle haben, wird es unmöglich sein, einen '2016-07-14' Eintrag mit Wert 0 zu haben. Oder Sie müssen etwas Voodoo mitmachen eine Tabelle, die jedes Datum für die Zukunft zum Beispiel 3 Jahre enthält. – Julqas

Antwort

0

Ich habe eine Lösung finden. Ich habe ein Startdatum und ein Enddatum. Mit einem für mich bekomme ich alle Termine zwischen ihnen. Dann vergleiche ich sie mit dem Datum in der Datenbank.

Vielen Dank für die Reaktionen!

0

können Sie versuchen, die folgende Abfrage:

SELECT 
v.selected_date, 
COALESCE(YT.count,0) AS count 
FROM 
(select adddate(DATE_SUB('2016-07-15', INTERVAL 2 DAY),t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, 
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v 

LEFT JOIN 
(
    SELECT 
    SUM(count) AS count, 
    date 
    FROM 
    statistics #Your table name 
    WHERE 
    date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' 
    GROUP BY DATE(date) 
) AS YT 
ON YT.date = v.selected_date 
WHERE v.selected_date BETWEEN DATE_SUB('2016-07-15', INTERVAL 2 DAY) AND '2016-07-15' ; 

Hinweis:

Die markierten Teile werden von Ihnen angegebenen Datumsbereich ändern sich je nach.

Geben Sie im ersten hervorgehobenen Teil das Anfangsdatum Ihres Datumsbereichs ein.

Im zweiten und dritten hervorgehobenen Teil setzen Sie Ihren gesamten Datumsbereich wie in Ihrer Anfrage.

enter image description here

Verwandte Themen