2015-10-05 59 views
2

我有2个表像是否有一个MySQL查询,可以编码成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的,可以让我的JSON基本上是cases表从其carid一个一对多的关系colummn到相关联的asseturlprevimgurl,像

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

设置:

var cases = <?php 
        $Q = ????; 
        echo json_encode($wpdb->get_results($Q)); 
       ?> 

这可能吗?

+4

我对此表示怀疑。你将不得不查询数据,循环这些结果并以你想要的格式建立一个数组。查询将只拔出在2D(列行)数据,而不是3D或4D(与一个或多个列中的数据的另一阵列列的行)。理想情况下它可能会是两个查询,环在第一和注入所述第二与第一下一个子阵列。 –

+0

如果您正在使用某个具有ORM的框架(或者您可以将一个框架添加到您的项目中),则可以利用该框架来交付所需的结果集。如果没有,那么取决于你在json编码之前获取数据并安排它。 – JimL

+1

鉴于这个问题上有一个php标签,我建议你编写用该语言序列化数据的代码。 –

回答

2

恕我直言,你真的,因为它不是非常有效的,几乎没有任何意义不需要做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 
+0

不错的想法:)关于这个的一个问题 - 当你在查询结果中得到'assetinfo'字段时,这不会是一个大字符串,如果你调用''' json_encode'上的查询结果? – bunnmatt

+0

@bunnmatt那要看是哪个WordPress功能'get_results'返回。你可以检查wordpress的codex。 – Alex

0

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

+0

你确定吗? ;-) – Alex

相关问题