0

我有一个 mysql 表:events并且想获得特殊格式的 json_string。

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);
 ); 
4

2 回答 2

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...
); 
于 2012-05-30T09:12:34.077 回答
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}}
}]}
于 2012-05-30T09:23:46.850 回答