2012-05-30 2 views
0

У меня есть таблица mysql: events и хотелось бы получить специальную форматированную json_string.Создайте строку json, сгруппированную по годам из результатов запросов MySQL

id event 
1 2010-01-01 00:00:00 
2 2010-02-02 00:00:00 
4 2011-01-04 00:00:00 
5 2012-01-30 00:00:00 
6 2012-02-15 00:00:00 
7 2012-03-16 00:00:00 
8 2012-04-10 00:00:00 
... 

Мне нужно получить JSon строку:

{"events":[ 
{"2010":{"id":1,"event":2010-01-01 00:00:00},{"id":2,"event":2010-02-02 00:00:00}}, 
{"2011":{"id":4,"event":2011-01-04 00:00:00}}, 
{"2012":{"id":5,"event":2012-01-30 00:00:00},{"id":6,"event":2012-02-15 00:00:00},{"id":7,"event":2012-03-16 00:00:00},{"id":8,"event":2012-04-10 00:00:00}} 
}]} 

Мой код ниже:

$result = DB::query('SELECT id, event FROM events'); 
$events = array(); 
while($event = $result->fetch_object()) { 
    $events[] = $event; 
} 

return array(
    'events' => json_encode($events); 
); 

ответ

2

Что-то вроде этого:

$result = DB::query('SELECT id, event, YEAR(event) AS event_year FROM events'); 
$events = array(); 
while($event = $result->fetch_object()) { 
    $event_year = $event->event_year; 
    unset($event->event_year); 
    $events[$event_year][] = $event; 
} 

return array(
    'events' => json_encode($events, JSON_FORCE_OBJECT); // If you need it... 
); 
+0

Спасибо! Что мне делать, чтобы получить эту строку: – user889349

+0

Попробуйте запустить ее? –

1

Попробуйте этот запрос MySQL -

SELECT CONCAT('{"events":[\r\n', GROUP_CONCAT(json SEPARATOR '\r\n'), '\r\n}]}') FROM (
    SELECT 
    GROUP_CONCAT(CONCAT('{"', YEAR(event), '": {"id":', id, ',"event":', event, '}}')) json 
    FROM 
    events1 
    GROUP BY 
    YEAR(event) 
) t 

Он будет генерировать следующий JSON строку -

{"events":[ 
{"2010": {"id":1,"event":2010-01-01 00:00:00}},{"2010": {"id":2,"event":2010-02-02 00:00:00}} 
{"2011": {"id":4,"event":2011-01-04 00:00:00}} 
{"2012": {"id":5,"event":2012-01-30 00:00:00}},{"2012": {"id":6,"event":2012-02-15 00:00:00}},{"2012": {"id":7,"event":2012-03-16 00:00:00}},{"2012": {"id":8,"event":2012-04-10 00:00:00}} 
}]} 
Смежные вопросы