Nodejs Mysql中的嵌套查询

时间:2017-01-13 06:50:04

标签: mysql node.js

我想计算一张包含FOO表的表格中的一行。 以下代码有一个错误,只显示最后一个db_name。

var b; // without this line it would still work, since
       // b would implicitely become a global variable in a()
function a(){
    // function b(){ ... would *not* work here
    b=function(){
      alert('In');
    }
}
a();
b();

您能否建议我如何修复nodejs代码?

RESULT IS LOOK LIKE THIS:
db_0099,0
db_0099,5
db_0099,10
db_0099,3

2 个答案:

答案 0 :(得分:1)

我建议对这个问题采取两步解决方案:

  1. 使用连接池

    var pool = mysql.createPool({     主持人:'xxxxx',     用户:'xxxxx',     密码:'xxxxx',     connectionLimit:100 });

  2. 池可以进行自动连接,所以不要连接到你的数据库,只需

    pool.query(sql,function(err,res){})
    

    这样您就可以为每个查询使用一个连接,在使用它之后将自动关闭。

    1. 使用异步等待异步顺序查询。
    2. 为此创建一个返回promise

      的getResult函数
      function getResult(sql){
        return new Promise(function(resolve,reject){
          pool.query(sql, function(err, result){
            if(err){
              reject(err)
            }else{
              resolve(result)
            }
          })
        })
      }
      

      然后你可以等待循环中的每个查询

      pool.query(sql1, async function(err, result) {
        if (err) throw err;
        for (var i = 0; i < result.length; i++) {
          var db_name = result[i].db_name;
            console.log(db_name);
            var sql = sql2.replace("{0}",db_name)
            var res = await getResult(sql)
            console.log(db_name+','+res[0].solution); //Here db_name is showed only the last one.
        };
        pool.end()
      });
      

      P.S。:async await是4月份upcomming节点8.0.0发布的一个特性。对于节点7.x,您必须使用命令行开关

      启动脚本
      node --harmony-async-await yourscript.js
      

答案 1 :(得分:0)

您是否验证了结果的内容? 的console.log(结果);

如果可以的话试试这个:

solutions = results.map(result => {
    let dbName = result.db_name;
    let queryResult;
    connection.query(sql2.replace("{0}", dbName), function(err, result) {
      if (err) {
          throw err;
      } else {
        queryResult = `${db_name}, ${result[0].solution}`
        console.log(queryResult);
      }
    });
    return queryResult;  
})
console.log(solutions);

但是,请尝试使用ORM或sql解析器进行查询!

试试这个:)

https://hiddentao.com/squel/