首页 > 开发 > NodeJS > 正文

Nodejs+mysql 如何实现多维查询

2017-09-08 17:11:59  来源:网友分享

正在做一个零件价格查询的小系统 用的 node.js+mysql

想实现的是通过零件的ID查询出价格

麻烦的地方是 一共有4间公司的数据,而零件会在哪一间或几间公司的数据中出现是未知的,而且需求一次查询多个零件的价格。即:

输入一个或多个零件ID,各ID返回4个价格。

现在用的代码如下,貌似只能跑一次查询。网上查了一下好像应该用 async? 请大神们指导

user.js

//根据零件编号得到价格User.getPriceByPartNo = function getPriceByPartNo(PRT_NO, callback) {    pool.getConnection(function (err, connection) {        var tblarr = ["JF","HT","GQ"];        var getPriceByPartNo_Sql = ["","","",""];        //var getPriceByPartNo_Sql1 = "SELECT PRT_NO, STOCK, SRP as JFSRP FROM car_db.jf WHERE PRT_NO in ("+instring+")";        for(var i=0; i<tblarr.length;i++) {            getPriceByPartNo_Sql[i] = "select SRP as " + tblarr[i] + "SRP from car_db." + tblarr[i] + " WHERE PRT_NO = '"+ PRT_NO +"'";        }        var sqlstring = getPriceByPartNo_Sql.join(";") +            "select PART_NO_REPLACE from car_db.id_mapping WHERE PART_NO = '"+ PRT_NO+ "';"+            "select FLAG from car_db.LARGE WHERE PART_NO = '"+ PRT_NO+ "';";        console.log(sqlstring);        connection.query(sqlstring, function (err, result) {            connection.release();            if (err) {                console.log("getPriceByPartNo Error: " + err.message);                return;            }            console.log("invoked[getPriceByPartNo]");            console.log(result);        });    });};

index.js

 router.post('/', function(req, res) {  var PRT_NO = req.body['partNo'],  PRTARR = PRT_NO.toString().split(","),  STOCK = null,  JFSRP = null,  HTSRP = null,  CSSRP = null,  GQSRP = null,  FLAG = null,  PRT_NO_REPLACE = null;  var resultComb = [];for(var i=0; i<PRTARR.length;i++) {    User.getPriceByPartNo(PRTARR[i], function (err, results) {        resultComb[i] = [ PRTARR[i], results.JFSRP, results.HTSRP,results.CSSRP,results.GQSRP,results.PRT_NO_REPLACE, results.FLAG];    });    console.log(resultComb);    if(resultComb == '')    {        res.locals.error = '零件不存在';        res.render('index',{title:'主页'});        return;    }else{    }    res.render("result",{title:"主页", result: resultComb});}  return;

});

解决方案

node 版本 7.6.0 以上:

let ids = [1,2,3...]; //多个零件idids.map( v => { //遍历数组查询每个id的数据    (async v => { //es6的async/await        try {            let result = await Promise.all([ //分别查询四个公司                query1, //必须返回promise对象                query2,                query3,                query4,            ]);            // result 是一个结果数组,结果一一对应promise.all中的查询,结果为空就是空        } catch (err) {            //do something error        }    })(v);});