reol44 2021-03-26 23:04 采纳率: 40%
浏览 23

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

在用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方法里,但感觉有点麻烦,想问问有没有其他的方法

  • 写回答

2条回答 默认 最新

  • reol44 2021-03-26 23:28
    关注
    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();
            }
        })
    })

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

    评论

报告相同问题?

悬赏问题

  • ¥15 stc15f2k60s2单片机关于流水灯,时钟,定时器,矩阵键盘等方面的综合问题
  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开