2016-10-08 157 views
3

我有以下MySQL的表:檢索數據

| category | icon | 
------------------- 
| CAT_A | xxx | 
| CAT_B | yyy | 

而且

| sub_category | icon | category 
-------------------------------- 
| SUB_X  | ppp | CAT_A 
| SUB_Y  | qqq | CAT_A 
| SUB_Z  | rrr | CAT_B 
| SUB_U  | www | CAT_B 

現在,我想在一個查詢中的所有數據 我正在使用Node.JS和我寫了以下查詢

SELECT c.category categoryTitle,c.icon categoryIcon,s.sub_category subCategoryTitle,s.icon subCategoryIcon FROM C類INNER JOIN - 行業標準S ON c.title = s.category

這是我的node.js代碼

var arrCategories = []; 
    for (var category in rows) { 
     if (rows.hasOwnProperty(category)) 
      arrCategories.push(rows[category]); 
    } 
    response.json(arrCategories); 

現在我得到以下響應

[ 
{ 
    "categoryTitle":"CAT_A", 
    "categoryIcon":"xxx", 
    "subCategoryTitle":"SUB_X", 
    "subCategoryIcon":"ppp" 
}, 
{ 
    "categoryTitle":"CAT_A", 
    "categoryIcon":"xxx", 
    "subCategoryTitle":"SUB_Y", 
    "subCategoryIcon":"qqq" 
},...... 
] 

但我想下面的輸出:

[ 
{ 
    "categoryTitle":"CAT_A", 
    "categoryIcon":"xxx", 
    "subCategory":[ 
     { 
     "subCategoryTitle":"SUB_X", 
     "subCategoryIcon":"ppp" 
     }, 
     { 
     "subCategoryTitle":"SUB_Y", 
     "subCategoryIcon":"qqq" 
     }, 
    ] 
},...... 
] 

我應該怎麼做,以獲得所需格式

任何幫助appriciated

回答

1

這是另一個不需要更改SQL的選項。

var categoryMap = {}; 
var categories = []; 
rows.forEach(function(row) { 
    var category = categoryMap[row.categoryTitle]; 
    if (!category) { 
     category = { 
     categoryTitle: row.categoryTitle, 
     categoryIcon: row.categoryIcon, 
     subCategory: [] 
     }; 

     categoryMap[row.categoryTitle] = category; 
     categories.push(category); 
    } 

    category.subCategory.push({ 
    subCategoryTitle: row.subCategoryTitle, 
    subCategoryIcon: row.subCategoryIcon 
    }); 
}); 

response.json(categories); 
1

使用GROUP_CONCAT同時按類別和圖標分組可能會給你一個可以接受的結果輸出:

SELECT c.category     AS categoryTitle, 
     c.icon      AS categoryIcon, 
     GROUP_CONCAT(s.sub_category) AS subCategoryTitle, 
     GROUP_CONCAT(s.icon)   AS subCategoryIcon 
FROM categories c 
INNER JOIN sub_categories s 
    ON c.title = s.category 
GROUP BY c.category, 
     c.icon 

此查詢應該產生輸出到您的Node.js應用程式看起來像以下:

[ 
{ 
    "categoryTitle":"CAT_A", 
    "categoryIcon":"xxx", 
    "subCategoryTitle":"SUB_X,SUB_Y", 
    "subCategoryIcon":"ppp,qqq" 
}, 
{ 
    "categoryTitle":"CAT_B", 
    "categoryIcon":"yyy", 
    "subCategoryTitle":"SUB_Z,SUB_U", 
    "subCategoryIcon":"rrr,www" 
}, 
... 
] 
+0

不錯,非常感謝,現在我可以操縱它到我想要的輸出。真棒 – ThunderRoid