[英]TypeError: Cannot read property 'title' of undefined Nodejs Mysql Query result
[英]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.