我有以下 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 categories c INNER JOIN sub_categories 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"
},
]
},......
]
我应该怎样做才能以所需的格式获得输出
任何帮助都是适当的
答案 0 :(得分:2)
这是另一个不需要更改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 :(得分: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"
},
...
]