是否有一个可以用这种方式编码为JSON的MySQL查询?

时间:2015-10-05 18:40:03

标签: php mysql sql json

我有两张表,比如

                    work_assets
  -----------------------------------------------------
   id  |     asseturl    |    previmgurl     |  carid
  -----------------------------------------------------
    1  |    "pic1.jpg"   |     "pic2.jpg"    |    1
    2  |    "pic3.jpg"   |     "pic4.jpg"    |    1
    3  |    "pic5.jpg"   |     "pic6.jpg"    |    2
    .  |      ...        |        ...        |    .
    .  |      ...        |        ...        |    .


                       cases
  -----------------------------------------------------
   id  |       ...       |    carid   |      ...
  -----------------------------------------------------
    1  |        ...      |     1      |      ... 
    2  |        ...      |     2      |      ...         
    3  |        ...      |     69     |      ... 
    .  |        ...      |    ...     |      ...
    .  |        ...      |    ...     |      ...

我的希望是我可以执行某种类型的查询Q,它可以让我找到基本上是cases表的JSON,它与{{1}的一对多关系} colummn到关联的caridasseturl,例如

previmgurl

设置:

[
 { id : 1, ..., assetinfo: [ { asseturl : "pic1.jpg", previmgurl: "pic2.jpg"}, { asseturl : "pic3.jpg", previmgurl: "pic4.jpg"} ], ... },
 { id : 2, ... }, 
 { id:  3, ... }, 
     .
     .
     .
]

这可能吗?

2 个答案:

答案 0 :(得分:1)

恕我直言,你真的不需要在mysql端做那个json转换,因为它效率不高,几乎没有意义。

但是,为了证明这是可能的(与@bannmatt意见相反),这是我的方法:

http://sqlfiddle.com/#!9/6bffb/7

SELECT c.*,
  CONCAT('assetinfo : [ ', 
     COALESCE(
        GROUP_CONCAT( CONCAT("{ asseturl: ",
                             wa.asseturl,
                             ', previmgurl: ', 
                             wa.previmgurl," }")
        ),
     ''),
   ' ]')
FROM cases c
LEFT JOIN work_assets wa
ON c.carid = wa.carid
GROUP BY c.id

答案 1 :(得分:0)

不幸的是,我不认为你能从你的数据库中获得一个SQL查询,它将按照你想要的方式串行化为JSON,因为你描述的结构是多维的 - 即一个嵌套在另一个数组中的数组。