2017-07-09 1 views
0

Ich brauche Hilfe beim Extrahieren von Daten aus einer Tabelle in Json. Ich muss die Daten abfragen und alle Datensätze für das aktuelle Jahr, das die WHERE-Anweisung erfüllt, zurückgeben und gleichzeitig die Ergebnisse nach MONTH gruppieren.Daten abfragen und als JSON-String zurückgeben

Was ich als die Abfrage haben, ist:

$query_Promoter = " 
SELECT COUNT(RecordID) AS Score4, FeedBackDate 
FROM ".$FeedBack." 
WHERE FeedBackDate >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
    AND A = 4 
    OR B = 4 
    OR C = 4 
    OR D = 4 
    OR E = 4 
    OR F = 4 
    OR G = 4 
    OR H = 4 
    OR L = 4 
    OR M = 4 
    OR N = 4 
GROUP BY MONTH(FeedBackDate)"; 
$Promoter =$conn->query($query_Promoter); 
$totalRows_Promoter = mysqli_num_rows($Promoter); 

ich dann Schleife durch das Ergebnis wie:

if($totalRows_Promoter > 0) { 
    $rows_Promoter = array(); 
    $rows_Promoter ['name'] = 'Promoters'; 
    while($row_Promoter = mysqli_fetch_array($Promoter)) { 
     $rows_Promoter['Month'][] = date("M", strtotime($row_Promoter['FeedBackDate'])); 
     $rows_Promoter['data'][] = $row_Promoter['Score4']; 
    } 
} 

$result = array(); 

if($totalRows_Promoter > 0) { 
    array_push($result,$rows_Promoter); 
} 


print json_encode($result, JSON_NUMERIC_CHECK); 

// The resulting JSON is: 

[{"name":"Promoters","Month":["Jan","Jan","Jan","Jan"],"data":[3,10,17,1]}] 

Ich versuche, das Ergebnis zu erhalten:

[{"name":"Promoters","Month":["Jan","Feb","May","Jun"],"data":[3,10,17,1]}] 

Kann jemand sehen, was ich falsch mache, oder gehe ich das falsch an?

Vielen Dank im Voraus für Ihre Zeit.

+0

Bitte versuchen Sie "Y" vor dem "M" in Ihrem Datum ("M") Konvertierung (die StrTotime Linie), mal sehen, was wir von MySQL als FeedBackDate bekommen haben. Ich vermute, es ist etwas, das nicht von strtotime geparst werden kann (also gibt es null zurück und du bekommst den Monat von Epoch) also lass uns sehen ob du 1970 Jan bekommst oder was ... – dkellner

+0

@dkellner das ist das JSON durch entfernen (Datum ("M", strtotime .......)), [{"name": "Promotoren", "Monat": ["2017-01-29", "2017-02-27", "2017- 05-30 "," 2017-06-04 "]," Daten ": [3,10,17,1]}] – DCJones

+0

Das ist verrückt. Es sollte total funktionieren. – dkellner

Antwort

1

Sie können die meiste Arbeit in der SQL-Anweisung erledigen. Wenn Sie die Funktion GROUP_CONCAT und die Funktion DATE_FORMAT verwenden, erhalten Sie eine Zeile, die leicht in Ihr Array für JSON umgewandelt werden kann. Hier ist die SQL-Anweisung:

SELECT 
    'Promoters' as `name`, 
    GROUP_CONCAT(DATE_FORMAT(`FeedBackDate`,'%b')) as `Month`, 
    GROUP_CONCAT(COUNT(`RecordID`)) AS `data` 
FROM $FeedBack 
WHERE `FeedBackDate` >= DATE_SUB(NOW(),INTERVAL 1 YEAR) 
    AND (A = 4 
     OR B = 4 
     OR C = 4 
     OR D = 4 
     OR E = 4 
     OR F = 4 
     OR G = 4 
     OR H = 4 
     OR L = 4 
     OR M = 4 
     OR N = 4) 
ORDER BY DATE_FORMAT(`FeedBackDate`,'%b') 

Um das Array aus der Reihe zu erstellen, müssen Sie die beiden Spalten mit der GROUP_CONCAT aufzuspalten, da sie durch Komma getrennte Strings sein werden.

+0

danke für deine Hilfe. Ihre Abfrage Fehler mit "Ungültige Verwendung der Gruppenfunktion", können Sie sehen, warum? – DCJones

+0

Bei Überprüfung kann ich sehen, warum. Auch die Gruppe sollte nicht in den Monaten sein, da wir sie alle in einem Monat sammeln wollen. Versuchen Sie, die Gruppe vollständig zu entfernen, sodass sie eine aggregierte Zeile zurückgibt. –

+0

Hoppla! Tippfehler im obigen Kommentar. _ "alles in einem Monat" _ sollte _ "alle in einer Reihe sein" _ –