繁体   English   中英

如何多次循环MYSQL查询并从node.js中的每个循环查询返回数据?

[英]How do I loop a MYSQL query multiple times and return the data from each looped query in node.js?

我有一个数据库,该数据库具有一个名为Inventory的表,该表具有五列:主键,sku,项目名称,描述和价格。 我也有一个称为skus的SKU数组。 我的目标是运行一个for循环,并使用每个SKU多次查询Inventory表,以从每个列中收集有关每个SKU的所有信息,然后将其输出。

我对Node的异步特性还很陌生,在首先从表中获取所有数据,然后在将所有数据收集和整理好之后再输出它们时,我遇到了麻烦。

这是我的代码:

var skus = [2, 1, 3, 4];

function inventoryLoop() {

    for(var i=0; i<skus.length; i++)
    {

        var deferred = Q.defer();

        connection.query("select * from Inventory where SKU = '"+skus[i]+"'", function(err, rows, fields) {

        deferred.resolve(rows);       

        }); //connection.query

    } //for-loop

    return deferred.promise;

} //inventoryLoop()


Q.all(inventoryLoop()).then(function(results) {

    console.log("results");        
    console.log(JSON.stringify(results));

}); //Q.all

这是我的输出:

[
    {"inventoryObjectID":2,"SKU":"2","itemName":"Lego 2","description":"Lego 2 Description","price":2}
]

这是我想要的输出:

Results
[
    {"inventoryObjectID":2,"SKU":"2","itemName":"Lego 2","description":"Lego 2 Description","price":2}
    {"inventoryObjectID":1,"SKU":"1","itemName":"Lego 1","description":"Lego 1 Description","price":1}
    {"inventoryObjectID":3,"SKU":"3","itemName":"Lego 3","description":"Lego 3 Description","price":3}
    {"inventoryObjectID":4,"SKU":"4","itemName":"Lego 4","description":"Lego 4 Description","price":4}
]

如果您遍历列表以分别获取每个项目的信息,则最终将对数据库执行多个查询。 相反,您可以创建一个更复杂的查询,该查询将为您提供所需的所有信息,从而减少执行的查询的数量。

在您的情况下,因为您有一个sku列表,所以可以运行查询以获取与该sku匹配的所有行。 您可以使用以下查询进行操作:

SELECT * FROM Inventory WHERE SKU='1' OR SKU='2' OR SKU='3' OR SKU='4'

您可以创建更好的查询,以产生相同的输出,如下所示:

SELECT * FROM Inventory WHERE SKU IN ('1','2','3','4')

因此,您可以按以下方式编写查询,并避免遍历列表:

connection.query("SELECT * FROM Inventory WHERE SKU IN ("+skus+")", function(err, rows, fields) {...});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM