2013-10-11 118 views
0

是否有一個快速的方法,而不使用一系列複雜的for循環(使用類似Underscore的東西?或對我的MySQL查詢的改進?)採取我的數據,格式化在一個平坦的列表這樣的:平面MySQL查詢嵌套JSON對象

[ 
    { 
    "J_NUM": "BOAK-1212", 
    "X_DUE_DATE": "2012-06-20T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Mail List Due", 
    }, 
    { 
    "J_NUM": "BOAK-1212", 
    "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Vendor Specs 2", 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "X_DUE_DATE": "2012-06-11T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Client Final Approval", 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME": 0, 
    "X_NAME": "Vendor Specs 2", 
    } 
] 

而基於某些參數,在這種情況下J_NUM,巢/組,以便它出來是這樣的:

[ 
    { 
    "J_NUM": "BOAK-1212", 
    "SCHEDULE_SERIES": [ 
     { 
     "X_DUE_DATE": "2012-06-20T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Mail List Due", 
     }, 
     { 
     "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Vendor Specs 2", 
     } 
    ] 
    }, 
    { 
    "J_NUM": "JEFF-2000", 
    "SCHEDULE_SERIES": [ 
     { 
     "X_DUE_DATE": "2012-06-11T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Client Final Approval", 
     }, 
     { 
     "X_DUE_DATE": "2012-06-08T00:00:00.000Z", 
     "X_LEAD_TIME": 0, 
     "X_NAME": "Vendor Specs 2", 
     } 
    ] 
    } 
] 

回答

0

用Underscore表示出來。

_.groupBy(theData, 'J_NUM')將返回以下:

{"BOAK-1212":[ 
    {"J_NUM":"BOAK-1212", 
    "X_DUE_DATE":"2012-06-20T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Mail List Due"}, 
    {"J_NUM":"BOAK-1212", 
    "X_DUE_DATE":"2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Vendor Specs 2"} 
], 
"JEFF-2000":[ 
    {"J_NUM":"JEFF-2000", 
    "X_DUE_DATE":"2012-06-11T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Client Final Approval"}, 
    {"J_NUM":"JEFF-2000", 
    "X_DUE_DATE":"2012-06-08T00:00:00.000Z", 
    "X_LEAD_TIME":0, 
    "X_NAME":"Vendor Specs 2"} 
]} 
2

在while循環,你可以建立你想要的輸出:

$query = "SELECT ..."; 
$result = mysqli_query($link, $query); 
$out = array(); 
while($row=mysqli_fetch_assoc($result)) { 
    $J_NUM = $row['J_NUM']; 
    if(!array_key_exists($J_NUM, $out)) { 
    $out[$J_NUM] = array("J_NUM" => $J_NUM, "SCHEDULE_SERIES" => array()); 
    } 
    $out[$J_NUM]['SCHEDULE_SERIES'][] = array(
    "X_DUE_DATE" => $row['X_DUE_DATE'], 
    "X_LEAD_TIME" => $row['X_LEAD_TIME'], 
    "X_NAME"  => $row['X_NAME']); 
} 
$out = json_encode(array_values($out), true); 
+0

非常感謝你的幫助,但我一直在尋找的JavaScript的東西。我使用Underscore庫中的groupBy找到解決方案。 –