以一级标题表二级标题表为例,一级标题表有id,sort,title字段,二级标题表有id2,sort2,title2字段,将mysql查询的数据分层为一级标题包含二级标题的json格式,且一级标题按sort由小到大排序,二级标题也由小到大排序,这个js应该如何写?
时间: 2023-06-01 10:01:28 浏览: 96
用markdown写多级标题,即一级标题,二级标题,三级标题,四级标题,五级标题,六级标题
假设一级标题表为"table1",二级标题表为"table2",可以使用以下代码实现:
```javascript
// 连接MySQL数据库的配置
const mysqlConfig = {
host: 'localhost',
user: 'root',
password: 'password',
database: 'database'
};
// 导入MySQL模块
const mysql = require('mysql');
// 创建MySQL连接池
const pool = mysql.createPool(mysqlConfig);
// 查询一级标题和二级标题的SQL语句
const sql = `
SELECT t1.id, t1.sort, t1.title, t2.id AS id2, t2.sort AS sort2, t2.title AS title2
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.table1_id
ORDER BY t1.sort ASC, t2.sort ASC
`;
// 查询数据并处理为JSON格式
pool.query(sql, (error, results) => {
if (error) {
console.error(error);
return;
}
const json = [];
// 遍历查询结果
results.forEach((row) => {
// 查找当前一级标题在JSON中的位置
let index1 = json.findIndex((item) => item.id === row.id);
if (index1 === -1) {
// 若JSON中不存在当前一级标题,则添加一个新的一级标题对象
const item1 = {
id: row.id,
sort: row.sort,
title: row.title,
children: []
};
json.push(item1);
index1 = json.length - 1;
}
if (row.id2) {
// 若当前行存在二级标题,则添加到对应的一级标题对象的children数组中
const item2 = {
id2: row.id2,
sort2: row.sort2,
title2: row.title2
};
json[index1].children.push(item2);
}
});
console.log(JSON.stringify(json));
});
```
代码中使用了MySQL连接池进行数据库连接和查询,并将查询结果处理为JSON格式。遍历查询结果时,通过findIndex方法查找当前一级标题在JSON中的位置,若不存在则添加一个新的一级标题对象,并将当前二级标题添加到对应的一级标题对象的children数组中。最后输出生成的JSON字符串。
阅读全文