2011-07-07 66 views
1

我在使用web sql數據庫的html5項目。如何使用web sql數據庫對兩個表進行遞歸查詢?

我有2個表格。

產品表

  • ID

價格表

  • ID
  • PRODUCT_ID
  • 日期
  • 價格

產品可以有多個不同日期的價格。

我想是這樣的:

bd.x.transaction(function (tx) { 
    tx.executeSql('SELECT * FROM Products WHERE id = ?', intProductId, 
     function (tx, rs) { 
      if (rs.rows.length > 0) { 
       var objProduct = new clsProduct(); 
       objProduct.setId(rs.rows.item(0).id); 
       objProduct.setName(rs.rows.item(0).name); 

       // Query Price Start 
       bd.x.transaction(function (tx) { 
        tx.executeSql('SELECT * FROM Prices WHERE product_id = ?', intProductId, 
         function (tx, rs) { 
          var x = rs.rows.length; 
          if (x > 0) { 
           var arrResult = []; 
           for (var i = 0; i < x; i++) { 
            arrResult[i] = new clsPrice(); 
            arrResult[i].setId(rs.rows.item(i).id); 
            arrResult[i].setDate(rs.rows.item(i).date); 
            arrResult[i].setPrice(rs.rows.item(i).price); 
           } 

           // set prices 
           objProduct.setPrice(arrResult); 
          } 
         }, 
         bd.onError 
        ); 
       }); 
       // Query Price End 
      } 
     }, 
     bd.onError 
    ); 
}); 

的問題是,價格查詢光潔度和objProduct.getPrice之前的產品查詢完成()返回undefined。

如果我在價格查詢中放置了一個警報,記錄被找到並且我可以看到結果。

我該怎麼辦?

謝謝。

回答

0

您要使用複合查詢,其中,SQL是一樣的東西:

SELECT * FROM Products WHERE id IN (SELECT * FROM Prices WHERE product_id = ?) 

這樣,你只需要一個查詢執行;從SQL的角度來看它更好。

+0

你說得對。我很擔心HTML5的新的可能性,我忘了舊的解決方案。感謝您記住,世界不僅僅是轉向HTML5。呵呵 :) –