2016-09-11 2 views
2

Ich habe eine SQL-Abfrage:Aufruf zur DB Rückkehr unvollständige Daten

select count(*) AS revolutions, DATE_FORMAT(time, '%Y-%m-%d %H') as time_period from `raw_data` where `time` >= '2016-09-10 21:51:33' group by `time_period` 

Dies gibt die folgenden Daten in einem MySQL-Client:

revolutions | time_period 
630   | 2016-09-10 23 
2062  | 2016-09-11 00 
1839  | 2016-09-11 01 
377   | 2016-09-11 02 
83   | 2016-09-11 03 
325   | 2016-09-11 04 

In Laravel ich eine identische Abfrage zu erstellen, die ein Dump von wie folgt aussieht:

["sql"]=> 
    string(136) "select count(*) AS revolutions, DATE_FORMAT(time, '%Y-%m-%d %H') as time_period from `raw_data` where `time` >= ? group by `time_period`" 
    ["bindings"]=> 
    array(1) { 
    [0]=> 
    string(19) "2016-09-10 22:02:02" 
    } 

aber dies gibt den folgenden Satz von Daten:

[ 
    { 

    "revolutions": 1863, 
    "time_period": "2016-09-10 22" 
    }, 
    { 
    "revolutions": 1839, 
    "time_period": "2016-09-10 23" 
    }, 
    { 
    "revolutions": 377, 
    "time_period": "2016-09-11 00" 
    }, 
    { 
    "revolutions": 83, 
    "time_period": "2016-09-11 01" 
    }, 
    { 
    "revolutions": 325, 
    "time_period": "2016-09-11 02" 
    } 
] 

Was könnte die fehlenden Daten auf 02 und die nicht vorhandenen Daten auf 03 und 04 verursachen?

Bearbeiten: Zeitzone wurde in Lumen nicht festgelegt.

Fix war eine Config-Wert auf den .env

DB_CONNECTION=mysql 
DB_TIMEZONE=+02:00 
+0

diese zwei Datensätze sind ziemlich difirent – nogad

+0

" Ich baue eine identische Abfrage "--- es sei denn, es ist nicht: Der Zeitparameter hat einen anderen Wert. – zerkms

+0

@zerkms der Zeitparameter sollte dafür nicht wichtig sein. Als sowohl eingestellt, um Daten aus der Vergangenheit zu finden. –

Antwort

2

Es scheint, hinzufügen, dass time von timestamp-Typ ist, die die Zeit in einer Zeitzone umwandelt, die der Kunde ausdrücklich Recht geben sollte, nachdem sie verbunden sind.

es einzustellen explizit man die

SET time_zone = timezone; 

Abfrage aussenden müssen.

und der Standardwert stammt aus der config (oder CLI-Parameter) Direktive default-time-zone

Referenzen:

+0

Sie, Sir, sind eine Zeitersparnis! –

Verwandte Themen