如何设计数据库查询的方法

在用node写一个查询商品的方法,用的是mysql

在网上查到的node操作mysql方法:

router.get("/select",(req,res) => {
    let name = req.params.name;
    let seller = req.params.seller;
    let buyer = req.params.buyer;
    let maxPrice = req.params.maxPrice;
    let minPrice = req.params.minPrice;
    db.connection.connect();
    db.connection.query('SELECT * from commoditys WHERE name=? AND seller=? AND buyer=? AND price>? AND price<?', [name,seller,buyer,minPrice,maxPrice], (err, back) => {
        if (err) {
            console.log("select mysql ERR\n" + err.message);
            res.send({status: "fail", message: "unknown err"});
            db.connection.end();
        } else {
            res.send({data: back});
            db.connection.end();
            res.end();
        }
    })
})

但是这样查询就只能所有参数都由才能查

如果我想写一个可以适应严格查询和范围查询的方法该怎么写呢

最开始我想到的是 用if来判断用户get里面传了什么 在拼接sql字符串传到query方法里,但感觉有点麻烦,想问问有没有其他的方法

router.get("/select", (req, res) => {
    let db = new Database('localhost', 'xxx', 'xxxxxx', 'xxxx', 'xxxxserve');
    let name = req.query.name;
    let seller = req.query.seller;
    let buyer = req.query.buyer;
    let maxPrice = req.query.maxPrice;
    let minPrice = req.query.minPrice;
    let sql = 'SELECT * from commoditys WHERE ';
    let params = [];
    let flag = false;
    console.log(name);
    if (name != null) {
        sql += "name=? ";
        params[params.length] = name;
        flag = true;
    }
    if (seller != null) {
        if (flag == true)
            sql += "AND "
        sql += "seller=? ";
        params[params.length] = seller;
        flag = true;
    }
    if (buyer != null) {
        if (flag == true)
            sql += "AND "
        sql += "buyer=? ";
        params[params.length] = buyer;
        flag = true;
    }
    if (maxPrice != null) {
        if (flag == true)
            sql += "AND "
        sql += "price<=? ";
        params[params.length] = maxPrice;
        flag = true;
    }
    if (minPrice != null) {
        if (flag == true)
            sql += "AND "
        sql += "price>=?";
        params[params.length] = minPrice;
    }
    console.log(sql + "  " + params);
    db.connection.connect();
    db.connection.query(sql, params, (err, back) => {
        if (err) {
            console.log("select mysql ERR\n" + err.message);
            res.send({status: "fail", message: "unknown err"});
            db.connection.end();
        } else {
            res.send({data: back});
            db.connection.end();
            res.end();
        }
    })
})

写了个拼串的,感觉太长了

把你的一堆 if 改进下,写个循环去处理即可。数组可以用 push 插入最后一个元素,sql数组最后 join 下即可。