在mysql+node js中,如何在另一个查询中使用一个查询的结果数组?

wxclj1h5  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(295)

我想在第二个查询(sql2)中使用第一个查询(sql1)的结果。第一个查询(sql1)的结果进入.ejs页,但第二个查询(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}); 
    });
xqk2d5yq

xqk2d5yq1#

你需要筑巢 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...');

}
});

gpfsuwkq

gpfsuwkq2#

我知道这个问题已经有了答案,但我想提供一个只支持sql的解决方案:使用子查询,而不是执行两个单独的查询,并在node.js中对它们的结果进行操作。

SELECT
  *
FROM lights
WHERE
  room_name IN (
    SELECT room_name FROM rooms
  );

相关问题