我有一个SQLite查询来从数据库中的ORDERS表中提取订单:
qry.executeSql("SELECT o.ID AS orderIDx, o.token AS orderTokenx, r.retailerName AS retailerNamex FROM orders AS o LEFT JOIN retailers AS r ON r.token = o.retailerID ", [], function(tx, results){
//query was a success
var len = results.rows.length;
for (var i=0; i<len; i++){
var orderID = results.rows.item(i).orderIDx;
var orderToken = results.rows.item(i).orderTokenx;
var retailerName = results.rows.item(i).retailerNamex;
//create container for order and populate it with orderItems in the below query
qry.executeSql("SELECT * FROM orderItems WHERE orderID = '"+orderToken+"' ", [], function(tx1, results1){
var len1 = results1.rows.length;
for (var i1=0; i1<len1; i1++){
$('.orderItem.'+orderID+' p').append(results1.rows.item(i1).productName);
}
});
}
});
这是我的查询,但是有很多杂乱,我离开了必需品。
所以我试图循环遍历订单表并在一个部分中显示订单特定信息,并在其中作为下拉列表我用widh来替换每个订单项。所以在订单循环中我使用该ID来调用orderItems等...但它只是在最后一个容器中附加orderItem查询的结果。
我想这是因为查询是异步的,但我不确定如何在执行订单查询的下一个循环之前弹出orderItem容器:/
我正在努力用Asynchronmous jQuery AJAX做同样的事情..所以如果这是相关联的,那么解释会很棒。
另外,我打算使用JOIN加入外部查询中的order和orerItems表,但是不确定如何循环遍历项目以及1循环中的订单?
答案 0 :(得分:1)
对我来说问题似乎是orderID
变量,它在orderItems被追加之前发生了变化。
我认为如果你将最后的循环改为
会有所帮助var len1 = results1.rows.length;
var order_id = results1.rows.item(0).orderID;
for (var i1=0; i1<len1; i1++){
$('.orderItem.'+order_id+' p').append(results1.rows.item(i1).productName);
}
在这种情况下,您将不再使用已更改的变量。