2015-12-16 87 views
0

有人可以帮助我对返回的查询执行此查询吗?在每次迭代中运行查询

我希望查询通过前面的查询结果迭代,看是否有优惠券已被使用

这是查询代码:

db.query('SELECT * FROM Table WHERE ID in ?', [(1,2,3,4)], 
function(err, rows) { 
    if (err) throw err 
    var items = [] 
    rows.forEach(function(i) { 
     var item = { 
      'item1': i.item1, 
      'item2': i.item2, 
      'item3': i.item3 
     } 
     db.query('SELECT * FROM Table2 WHERE ID = ?', [i.ID], 
     function(err, rows2) { 
      if (err) throw err 
      item.subvalue = rows2 
     }) 
     items.push(item) 
     }) 
     res.json(items) 
    }) 
+0

你能澄清一下问题是什么 - 返回什么?试图展示的代码是什么?你在代码中遇到的问题在哪里? –

+0

'['(1,2,3,4)]' - >'[((1,2,3,4)]' – Kenney

+0

主要查询是获取本例预订给定月份的物品列表。然后,我需要遍历结果并用第二个查询检查是否是每个项目上使用的凭证。两个查询分别工作正常,我想知道最好的方法来作为第二个查询结果在foreach循环中构建的对象。因为我不能只是去item.subvalue = rows2 –

回答

0

所以我在做这个结束。使用multiple语句,其中第二个查询返回查询1中结果的所有可能结果。然后,我可以遍历结果1和结果2。

还不确定这是最好的方法,但它的工作原理。任何建议都非常欢迎

db.query('SELECT 1 WHERE Range ?; SELECT 2 WHERE ID IN (SELECT 1)', 
[req.body.hotelid, '2015-11-01', '2015-11-30', 
req.body.hotelid, '2015-11-01', '2015-11-30'], 
    function(err, result) { 
     if (err) console.log(err) 
     else 
      var items = [] 
     result[0].forEach(function(i) { 
      var giftVoucherUsed = [] 
      var item = { 
       'ID': i.BookingID, 
       'BookingDate': i.BookingDate, 
       'GuestName': 'Guestname' 
      }     
      result[1].forEach(function(g){ 
       if(g.BookingID == i.BookingID){ 
        giftVoucherUsed.push(g) 
       } 
      }) 
      item['GiftVoucher'] = giftVoucherUsed 

      items.push(item) 
     }) 
     res.json(items) 
    });