sql封装分页查询并动态注入查询条件
/**
* 生成分页查询sql
* @param {string} table 表名
* @param {number} pageNum 分页页数
* @param {number} pageSize 分页条数
* @param {object} query 查询对象 例:{id:1,name:'小明'}
* @returns sql语句
*/
const limit = (table, pageNum, pageSize, query) => {
let sql = `WHERE `
let keyList = Object.keys(query) // 提取查询对象中的key为数组
//查询对象全为空则结束函数
if (!keyList.some(e => query[e])) { //如果查询对象中得value都为空的话查询条件为空
sql = ''
} else {
//生成SQL语句
keyList.forEach((e, index) => {
//判断下一个分页条件是否为空,如果不为空则拼接AND
let context = query[keyList[index + 1]] ? ' AND ' : ''
//value不为空时,拼接筛选条件
if (query[e]) {
sql += `${e} like '%${query[e]}%'${context} ` //拼接sql
}
})
}
return `SELECT * FROM ${table} ${sql}LIMIT ${(pageNum - 1) * 10},${pageSize}`
}
module.exports = limit
使用
let {
pageSize, // 条数
pageNum, // 页数
sb_Name // 穿过来的对象
} = req.query //req:请求对象 query:get请求携带对象
const selectData = {
sb_Name // 需要筛选的对象
}
let sqlString = limit('tableName', pageNum, pageSize, selectData)
// sqlString = SELECT * FROM u8_table LIMIT 0,10 sqlString
该代码实现了一个功能,用于生成带有分页和动态查询条件的SQL语句。它接受表名、页码、每页大小和一个包含查询条件的对象作为参数。如果查询对象的所有值都不为空,将基于LIKE运算符构建WHERE子句,否则返回没有WHERE条件的SQL。最后,结合LIMIT子句完成分页查询。
&spm=1001.2101.3001.5002&articleId=130266999&d=1&t=3&u=3472ba6f8f6f4d748cb488aa9dc262a3)
1903

被折叠的 条评论
为什么被折叠?



