以一级标题和二级标题为例,一级标题包含id,sort,title,二级标题包含id2,sort2,title2字段,用js技术将mysql查询的数据 分层成一级标题包含二级标题的json格式,这个js应该如何写?
时间: 2023-05-24 16:06:17 浏览: 142
假设查询结果为一个数组data,其中每个元素包含id, sort, title, id2, sort2, title2字段,我们可以按照以下步骤将数据分层成json格式:
1.定义一个空对象result作为最终结果。
2.遍历data数组,对于每个元素,判断result是否已有该一级标题,如果没有则在result中添加该一级标题,包括id和title字段,以及一个空数组children用于存放二级标题。
3.将该元素的二级标题id2, sort2, title2字段作为一个对象child添加到该一级标题的children数组中。
4.最终result即为分层后的json格式数据。
以下是相应的js代码:
```
let result = {};
data.forEach(item => {
if (!result[item.id]) {
result[item.id] = {
id: item.id,
title: item.title,
children: []
};
}
result[item.id].children.push({
id: item.id2,
sort: item.sort2,
title: item.title2
});
});
result = Object.values(result);
```
其中,Object.values()方法会将result对象中的所有属性值组成一个数组,作为最终结果返回。
相关问题
以一级标题表二级标题表为例,一级标题表有id,sort,title字段,二级标题表有id2,sort2,title2字段,将mysql查询的数据分层为一级标题包含二级标题的json格式,且一级标题按sort由小到大排序,二级标题也由小到大排序,这个js应该如何写?
假设一级标题表为"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字符串。
id teacher_id subject_id subject_parent_id title price lesson_num cover buy_count view_count version status is_deleted gmt_create gmt_modified 这是课程表的字段 id title parent_id sort gmt_create gmt_modified这是科目表的字段 科目是二级分类 查询二级课程科目的title和所占所有课程的百分比
以下是查询二级课程科目的title和所占所有课程的百分比的SQL语句:
```
SELECT s.title, CONCAT(FORMAT(COUNT(c.id) / t.total * 100, 2), '%') AS percentage
FROM edu_subject s
LEFT JOIN (
SELECT parent_id, COUNT(id) AS total
FROM edu_subject
WHERE parent_id IS NOT NULL
GROUP BY parent_id
) t ON s.id = t.parent_id
LEFT JOIN edu_course c ON s.id = c.subject_id
WHERE s.parent_id IS NOT NULL
GROUP BY s.id
ORDER BY percentage DESC;
```
其中,edu_subject表中的parent_id表示科目的上级分类,为NULL表示该科目为一级分类(大类),不为NULL表示该科目为二级分类(小类)。
以上查询结果中,percentage字段表示该科目下的课程数量占所有课程数量的百分比。如果该科目下没有对应的课程,百分比为0。
阅读全文