一、思路
分情况
如果是单表查询直接通过sql语句的limit关键字限制返回条数,将结果返回给前端就是了,
如果是多表查询就是查询中再嵌套查询,然后将数据处理后返回给前端
这里讨论多表查询的情况
二、连接数据库
const mysql = require("mysql");
// https://www.npmjs.com/package/mysql
module.exports = {
config: {
host: '127.0.0.1', // 数据库所在电脑的IP或者服务器的域名
port: 3306,
user: 'root',
password: '密码',
database: 'familydoctor',
multipleStatements: true, // 支持执行多条 sql 语句
timezone: '08:00' // 设置时区,如果不匹配,就可能有时差
},
connect(sql, params, cb) {
let conn = mysql.createConnection(this.config)
conn.connect(); // 打开链接
conn.query(sql, params, cb); //执行mysql语句
conn.end() //关闭链接
}
}
数据库
用户表
权限表
用户权限表
希望返回给前端的数据
三、接口
查询里面再嵌套查询,将数据处理后再返回给后端
// 5.管理用户列表-后端分页
userRouter.route('/getUserInfoPage')
.get(function(req, res) {
//解构
let { nowPage, pageCount } = req.query
// 总条数
let totalCount = 0
let sql = `SELECT * FROM systemusers`
let callback = (err, data) => {
//查询成功
if (err === null) {
console.log('++++++++', data);
//总条数
totalCount = data.length
//由于是多表查询,这里的分页我们采用前端分页的方式,详情见博客前端分页
let start = (nowPage - 1) * pageCount
let end = start + pageCount
let userArr = data.filter((item, index, arr) => {
return index >= 2 && index < 4
})
console.log(userArr);
// 没有查询到数据
if (userArr.length === 0) {
res.json({
code: 50001,
msg: '没有查询到数据'
})
return
}
//查询成功进行二层查询
let sql = ''
let params = []
// 根据userArr的长度拼接sql
for (let i = 0; i < userArr.length; i++) {
sql += `
SELECT a.acid,acname FROM systemusers AS s ,useraccess AS u,accesscontrol AS a
WHERE s.uid=u.uid AND u.acid=a.acid and s.uid=?;
`
params.push(userArr[i].uid)
}
let callback2 = (err, data) => {
console.log(data);
//查询成功
if (err === null) {
//数据的处理
if (data.length === 1) {
userArr[0].accessList = data
} else {
for (let i = 0; i < data.length; i++) {
userArr[i].accessList = data[i]
}
}
res.json({
code: 0,
msg: '查询成功',
data: userArr,
totalCount
})
}
}
//第二层查询
DB.connect(sql, params, callback2)
}
}
//第一层查询
DB.connect(sql, [], callback)
})