如何存储查询Mysql

时间:2019-03-05 02:30:11

标签: javascript mysql node.js express ejs

我将使用不同的ID值两次提取我的数据库。但是我需要将这两个查询保存在某个地方,然后将它们发送到res.render。我已经尝试保存在数组中,但是返回的是未定义的。

app.post('/searchInventory', urlencodedParser, function(req, res){
        con.query("SELECT id FROM products WHERE name LIKE '%" + req.body.keyword + "%'", function(err, result){
            data = [];
            for(var a = 0; a < result.length; a++){
                console.log(a);
                con.query("SELECT products.id AS id, products.name AS name, products.price AS price, SUM(enter.quantity) AS quantity FROM products JOIN enter ON products.id = enter.id_prod WHERE enter.id_prod = "+mysql.escape(result[a].id)+";", function(err, results, fields){
                // I need to store the query from here
                data =+ results
                });
            }
            console.log(data); //Undefined
            res.render('inventory', {results: results});
        });
    })

2 个答案:

答案 0 :(得分:0)

您可以使用子查询来查询产品,而不必两次查询。

con.query("SELECT products.id AS id, products.name AS name, products.price AS price, SUM(enter.quantity) AS quantity FROM products JOIN enter ON products.id = enter.id_prod WHERE enter.id_prod IN ( SELECT id FROM products WHERE name LIKE '%?%') ", req.body.keyword, function( error, result){
    console.log(result)
})

此外,数据+ =结果不会堆叠该数组。您可以使用Array.prototype.concat合并两个数组。

示例:

data = data.concat(result) 

data = [].concat(data, result)

答案 1 :(得分:0)

问题在于异步db查询,需要特别注意。 首先,您需要做的是使其易于阅读,这是创建查询承诺。

expect(json[:errors]).to include(a_string_matching(/can't be blank/))

现在您可以使用此承诺来处理所需的行为:

function dbQueryPromise(query) {
  return new Promise((resolve, reject) => {
    con.query(query, (err, results) => {
      if(err) return reject(err);
      resolve(results);
    })
  })
}