使用 JSON 格式的 Node.JS 从 MySQL 检索数据

Posted

技术标签:

【中文标题】使用 JSON 格式的 Node.JS 从 MySQL 检索数据【英文标题】:Retrieve data from MySQL using Node.JS in JSON format 【发布时间】:2017-02-17 05:29:21 【问题描述】:

我有以下 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"
      ,
   ]
,......
]

我应该怎么做才能获得所需格式的输出

任何帮助都是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);

【讨论】:

【参考方案2】:

在按类别和图标分组时使用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"
,
...
]

【讨论】:

很好,非常感谢,现在我可以将它操作为我想要的输出。太棒了 @Shifatul 也请分享您的方法

以上是关于使用 JSON 格式的 Node.JS 从 MySQL 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 中编写格式化的 JSON

Node.js 解析 HTML 表并以 JSON 格式获取结果

如何使用 Node.js 将 JSON 数据从 Node.js 发送和获取到 HTML

从 node.js 中的变量解析 CSV 表

将 JSON 从 angular.js 发送到 node.js

Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志