2013-10-11 4 views
0

Есть ли быстрый способ, не используя сложную серию циклов для циклов (используя что-то вроде 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

Выяснено, используя Подчеркивание.

_.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

В вашем цикле, пока вы можете построить вывод, который вы хотите :

$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. Я нашел решение, используя groupBy из библиотеки Underscore. –

Смежные вопросы