选择json对象的数组

时间:2016-06-01 06:09:28

标签: mysql json

只使用MySQL查询有没有办法将JSON对象列表转换并选择到一个列中?

例如,我有一个表event_time,它基本上是表event的子表,因此对于每个event,有许多event_time(s)。我要做的是创建如下的查询:

select e.*, (some select and conversion to a json array query) as 'event_times'
from event e;

我一直试图将MySQL的JSON_OBJECTJSON_ARRAY结合起来,但似乎并不支持。

以下查询有效但未给出我想要的结果(因为LIMIT 1

select e.*,
    (select json_object("id", et.id, "event_id", et.event_id, "start_time", et.start_time, "end_time", et.end_time)
    from event_time et
    where et.event_id = e.id
    LIMIT 1) as 'event_times'
from event e;

返回: enter image description here

如果某人有办法填写此查询的结果

select json_object("id", id, "event_id", event_id, "start_time", start_time, "end_time", end_time) as 'event_time' from event_time;

进入JSON_ARRAY我觉得它会给我我正在寻找的东西。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

感谢@BradBaskin已经在另一个问题上回答了这个问题。

https://stackoverflow.com/a/37474200/3071052

我接受了他的回答,并根据我的需要稍作修改。

select e.*,
    (select CAST(
        CONCAT('[',
            GROUP_CONCAT(
                JSON_OBJECT('id',et.id,'event_id',et.event_id, 
                'start_time', date_format(et.start_time, '%Y-%m-%d %H:%i'), 
                'end_time', date_format(et.end_time, '%Y-%m-%d %H:%i'))
            ),
        ']')
     AS JSON) 
     from event_time et
     where et.event_id = e.id
     ) as event_times
from event e;