js如何将mysql查询结果嵌套为联级菜单
时间: 2023-06-07 18:10:37 浏览: 59
你好,关于你的问题,你可以通过以下步骤来实现:
1. 查询数据库获取相关数据,比如获取父级菜单和子级菜单的数据。
2. 针对父级菜单的数据,将其遍历出来,并根据其 ID 对子菜单进行筛选,将子菜单添加到相应的父菜单的子节点中。
3. 最终将所有的父节点组成一个数组返回给前端渲染即可。
具体代码实现可参考以下示例:
```
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '******',
database: 'test_db'
});
const getParentMenu = () => {
return new Promise((resolve, reject) => {
const sql = 'SELECT * FROM menu WHERE parent_id = 0';
connection.query(sql, (error, results, fields) => {
if (error) {
reject(error);
} else {
resolve(results);
}
});
});
};
const getChildMenusByParentId = (parentId) => {
return new Promise((resolve, reject) => {
const sql = `SELECT * FROM menu WHERE parent_id = ${parentId}`;
connection.query(sql, (error, results, fields) => {
if (error) {
reject(error);
} else {
resolve(results);
}
});
});
};
const buildMenuTree = async () => {
const parentMenus = await getParentMenu();
const menuTree = parentMenus.map((parent) => {
const parentId = parent.id;
const childMenus = getChildMenusByParentId(parentId);
parent.children = childMenus;
return parent;
});
return menuTree;
};
buildMenuTree().then((menuTree) => {
console.log(menuTree);
}).catch((error) => {
console.log(error);
});
```
以上示例代码仅供参考,具体实现方式需要根据实际需求进行调整。