繁体   English   中英

Nodejs Mysql 查询与 mysql 变量无法保存结果

[英]Nodejs Mysql query with mysql variables cannot save result

我一直在尝试将此查询结果保存到变量中,但没有运气。 当我直接从工作台运行查询时,我得到结果,如果我从节点运行它,我得到以下

set @count=(select column from table where value = 'value');
SET @row_number = 0; 
select column from 
(SELECT 
    (@row_number:=@row_number + 1) AS num, 
   column
FROM
    table where column is null
ORDER BY column)as a
 where num <= @count

此代码基本上根据保存到 @count 的值从 tableA 中选择 X 行

var dnum = []; 
    dbconn.query('SET @row_number = 0;' +
     'set @count=(select column from table where column= "value");' +
     'select column from \n '+ 
     '(SELECT \n' +
     '    (@row_number:=@row_number + 1) AS num, \n' + 
     '   column \n' +
     'FROM \n' +
     '    table where column is null \n' +
     'ORDER BY column )as a \n' +
     'where num <= @count  ;',function(err,rows,result)     {
         console.log(rows)
         dnum = rows or //dnum.push(rows)
     })
     console.log(dnum)

样品 output:

 [
  OkPacket {
    fieldCount: 0,
    affectedRows: 0,
    insertId: 0,
    serverStatus: 10,
    warningCount: 0,
    message: '',
    protocol41: true,
    changedRows: 0
  },
  OkPacket {
    fieldCount: 0,
    affectedRows: 0,
    insertId: 0,
    serverStatus: 10,
    warningCount: 0,
    message: '',
    protocol41: true,
    changedRows: 0
  },
  [
    RowDataPacket { number: '123456789' },
    RowDataPacket { number: '098745612' }
  ]
]

我想将返回的 RowDataPacket 结果保存到一个变量以在其他地方使用。

谢谢

应该很简单:

rows.forEach(row => dnum.push(row.number));

如果您从多个查询返回多个结果,您可能需要跳到正确的一个。 这可以通过解构响应来完成:

dbconn.query('...', ,function(err,[ _ok1, _ok2, rows ], result) {
  rows.forEach(row => dnum.push(row.number));
}

_ok1_ok2在那里只是为了吸收对您的SET语句的“不关心”响应。

感谢@tadman的所有评论。 显然我之前的查询方法确实返回了预期的结果,但不知何故它不可用。 我能够通过下面的代码实现这一点。 不确定代码有多干净或合理,但它现在可以完成这项工作。直到我在其他地方搞砸了:)

function getNumbers(){
    return new Promise(function(resolve, reject) {
    var q = queue ///This part is returned from express frontend
    let sql1 = 'set @count=(select number from table where name= ? )';
    let sql2 = 'SET @row_number = 0';
    let sql3 =  'select number from \n '+ 
    '(SELECT \n' +
    '    (@row_number:=@row_number + 1) AS num, \n' + 
    '   number \n' +
    'FROM \n' +
    '    numbers where isSelected is null \n' +
    'ORDER BY number)as a \n' +
    'where num <= @count  ;'   
 


    dbconn.query(sql1,q, (err, fields) => {
    if (err) {
        return reject(err);
    } 
    
    });
    dbconn.query(sql2, (err,fields) => {
        if (err) {
            return reject(err);
        }
    }) 
        dbconn.query(sql3, (err, rows, fields) => {
            if (err) {
                return reject(err);
            }
            resolve(rows); 
            
        })
    
    })
    }
    //////////////////////////return number//////////////////////////////
    let dnum =[];

    getNumbers().then((rows) => {
    
    for (let i = 0; i < rows.length; i++) 
    
       // console.log(rows[i].number)    
        dnum.push(rows[i].number)
        console.log(dnum)       
    
    })

暂无
暂无

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

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