【问题标题】:How do I loop a MYSQL query multiple times and return the data from each looped query in node.js?如何多次循环 MYSQL 查询并从 node.js 中的每个循环查询返回数据?
【发布时间】:2015-08-21 18:34:11
【问题描述】:

我有一个数据库,其中有一个名为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}
]

【问题讨论】:

    标签: mysql node.js asynchronous q


    【解决方案1】:

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

    在你的情况下,因为你有一个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) {...});

    【讨论】:

      猜你喜欢
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      • 2019-09-11
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多