mysql - 如何在Mysql+Node JS中在另一个查询中使用一个查询的结果数组?

标签 mysql node.js

I want to use the result of first query(sql1) in second query(sql2). The result of first query(sql1) is getting in .ejs page but no result for the second query(sql2).

 var sql1 = 'SELECT * FROM `Rooms`';
    con.query(sql1,function(err,rows,fields){
    if(!err)
    {
        var count=rows.length;
        for(i=0;i<count;i++)
        {
            arr_room[i]=rows[i].room_name;
        }
    }
    else
    {
        console.log('error...');

    }
  });

    var sql2 = 'SELECT * FROM Lights WHERE room_name =? ' ;
    con.query(sql,arr_room[0],function(err,rows,fields){
          if(!err)
          {
              var count=rows.length;
              for(i=0;i<count;i++)
              {
                arr_icon[i]=rows[i].icon;

              }
          }
          else
          {
              console.log('error...');

          }

     res.render('lighting',{arr_icon,arr_room}); 
    });

最佳答案

您需要将sql2嵌套到sql1中,在nodejs中,一切都是异步的,这意味着您必须先等待某些事情完成。

您在第二个查询中出现了拼写错误,您调用了 sql 而不是 sql2

var sql1 = 'SELECT * FROM `Rooms`';
con.query(sql1, function(err, rows, fields) {
  if (!err) {
    var count = rows.length;
    //for (i = 0; i < count; i++) {
    //  arr_room[i] = rows[i].room_name;
    //}

    if (count) {

      // simplified version instead of for
      var arr_room = rows.map(i => i.room_name); 

      // you can safely use it inline since data comes straight from the database
      // query will use `in` condition: room_name in ('roomX','roomY', 'roomZ')
      var sql2 = `SELECT * FROM Lights WHERE room_name in ('${arr_room.join("','")}') `; 
      con.query(sql2, function(err, rows, fields) {
        if (!err) {
          var count = rows.length;
          for (i = 0; i < count; i++) {
            arr_icon[i] = rows[i].icon;

          }
        } else {
          console.log('error...');

        }

        res.render('lighting', {
          arr_icon,
          arr_room
        });
      });

    } else {

      console.log('no records to pass for sql2');

    }

  } else {
    console.log('error...');

  }
});

关于mysql - 如何在Mysql+Node JS中在另一个查询中使用一个查询的结果数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649272/

相关文章:

mysql查询选择一个目标的所有目标和完成的目标

php - PHP 和 MySQL 中的 Guid/Uuid

node.js - 与单个 Redis channel 相比,使用 Redis channel 的成本是多少

mysql - 选择查询锁定innodb表

mysql - 如何通过终端在mysql中连续上传文件的全文

node.js - NodeJS 将 base64 附加到文件

node.js - 在 Ionic 中使用 ngCordova 和 PushPlugin 的 azure 通知中心客户端代码

javascript - 当我取消注释一行代码时,我收到此错误 : _http_outgoing. js :359 throw new Error ('Can\' t set headers after they are sent. ');

javascript - 尝试使用 axios 从 Reactjs 组件发送数据到 Express 应用程序

mysql - 阐明如何使用 WITH、AS 函数代替子查询