Javascript NodeJS-MySQL:当第二个参数为null时进行查询
当第二个或任何下一个参数但第一个参数为空时,是否可以完成mySQL查询 例如,我根据给定的日期(Javascript NodeJS-MySQL:当第二个参数为null时进行查询,javascript,mysql,node.js,Javascript,Mysql,Node.js,当第二个或任何下一个参数但第一个参数为空时,是否可以完成mySQL查询 例如,我根据给定的日期(datereport)为单个项目(itemreport)生成报告 现在,如果前端没有选择任何项,并且其req.query.itemreport获取null,则必须执行查询的其余部分,因为用户请求了所有项,而不是单个项,并且没有停止执行,因为它获取了null参数(itemreport) 更新 添加了修复,添加了查询字符串。连我都错过了:) 更新 添加了修复,添加了查询字符串。连我都错过了:) COALE
datereport
)为单个项目(itemreport
)生成报告
现在,如果前端没有选择任何项,并且其req.query.itemreport
获取null
,则必须执行查询的其余部分,因为用户请求了所有项,而不是单个项,并且没有停止执行,因为它获取了null
参数(itemreport
)
更新
添加了修复,添加了查询字符串。连我都错过了:)
更新
添加了修复,添加了查询字符串。连我都错过了:)
COALESCE(我们可以去掉代码中的if-else)函数将考虑第一个参数,如果它不为null,否则它将比较item列的值与它本身,有关更多详细信息,请访问:
COALESCE(我们可以去掉代码中的if-else)函数将考虑第一个参数,如果它不为null,否则它将比较item列的值与自身,有关更多详细信息,请访问:您可以添加一个简单的if检查是否为null,并根据req值对查询进行优化。您可以添加一个简单的if检查是否为null,并根据req值对查询进行优化。谢谢,您的建议在
if(itemreport==null | | itemreport=''之后出现了严重的语法错误{
-谢谢,您的建议在if(itemreport==null | | itemreport=''){
-定义项参数且不为null时出错:错误:ER_PARSE_错误:您的SQL语法有错误;请检查[…]正确语法以使用near'和item='2017-06-21'“'在第1行
。您在if(itemreport)
中的第二个queryString
覆盖了初始queryString,结果导致整个查询出错。我在向上投票之前没有注意到。太好了。但是仍然需要在初始查询字符串上添加一些单引号,如”“SELECT SUM(total\u profit)”作为date_created=?'的交易的费用总额
,因此它不会进入conn.query
。现在它的下一个错误是,当query使用queryParams时,它只解析对象的第一个字符,因此它只读取第一个字符串的第一个字符(datereport->2017/06/21),在这种情况下,数字2
`检查正确的语法以使用near'”选择SUM(total_profice)作为交易的费用总额,其中date_created='2'位于第1行`我知道您面对的是什么。但是参数中的日期是string。您的db是否存储了date_created和日期时间(整数)格式化,然后与字符串进行比较?否,存储为日期,格式为2017-06-21,如果我通过后端手动进行查询,我会得到结果。但是问题不在MySQL存储中,而是在后端conn.query上,它不会读取整个字符串(queryParams obj中的datereport)它只从obj中获取第一个字符串的第一个字符,并停在那里,不管它是日期字符串还是项目字符串,在我的例子中恰好是日期字符串的第一个,所以它只获取2
(第一个字符)我在这里添加了一些注释,看看它们是否有意义,当定义了item参数且不为null时,它会出错:错误:ER\u PARSE\u错误:您的SQL语法有错误;请检查[…]正确的语法,以便在第1行使用near'和item='2017-06-21'。if(itemreport)中的第二个queryString
覆盖初始查询字符串,结果导致整个查询出错。我在upvoting之前没有注意到。很好。但是仍然需要在初始查询字符串上添加一些单引号,如““SELECT SUM(total_profit)”作为date_created=?'的交易的费用总额
,因此它不会进入conn.query
。现在它的下一个错误是,当query使用queryParams时,它只解析对象的第一个字符,因此它只读取第一个字符串的第一个字符(datereport->2017/06/21),在这种情况下,数字2
`检查正确的语法以使用near'”选择SUM(total_profice)作为交易的费用总额,其中date_created='2'位于第1行`我知道您面对的是什么。但是参数中的日期是string。您的db是否存储了date_created和日期时间(整数)格式化,然后与字符串进行比较?否,存储为日期,格式为2017-06-21,如果我通过后端手动进行查询,我会得到结果。但是问题不在MySQL存储中,而是在后端conn.query上,它不会读取整个字符串(queryParams obj中的datereport)它只从obj中获取第一个字符串的第一个字符,并停在那里,不管它是日期字符串还是项目字符串,在我的例子中恰好是日期字符串的第一个,所以它只获取2
(第一个字符)我在这里添加了一些评论,看看它们是否有意义。我认为这应该是正确的答案。我认为这应该是正确的答案。
reportsdateres.post(function(req, res, next) {
datereport = req.query.datereport;
itemreport = req.query.itemreport; // this can be null for querying all items
req.getConnection(function(err, conn) {
if (err) return next("Cannot Connect");
var query = conn.query("SELECT SUM(total_profit) AS fee_total FROM transactions WHERE date_created = ? AND item = ?", [datereport, itemreport], function(err, rows) {
// ^^^^^^^^^^^^
// do myStuff
});
});
});
reportsdateres.post(function(req, res, next) {
datereport = req.query.datereport;
itemreport = req.query.itemreport; // this can be null for querying all items
req.getConnection(function(err, conn) {
if (err) return next("Cannot Connect");
var queryString = "SELECT SUM(total_profit) AS fee_total FROM transactions WHERE date_created = ? ";
var queryParams = [];
queryParams.push(datereport);
if(itemreport){
queryString += ' AND item = ?'
queryParams.push(itemreport);
}
var query = conn.query(queryString, queryParams, function(err, rows) {
// do yourStuff
});
});
});
reportsdateres.post(function(req, res, next) {
datereport = req.query.datereport;
itemreport = req.query.itemreport; // this can be null for querying all items
req.getConnection(function(err, conn) {
if (err) return next("Cannot Connect");
if (itemreport==null || itemreport=='') {
var sql = "SELECT SUM(total_profit) AS fee_total FROM transactions WHERE date_created = ?";
var params = [datereport];
}else{
var sql = "SELECT SUM(total_profit) AS fee_total FROM transactions WHERE date_created = ? AND item = ?";
var params = [datereport, itemreport];
}
var query = conn.query(sql, params, function(err, rows) {
// ^^^^^^^^^^^^
// do myStuff
});
}); });
reportsdateres.post(function(req, res, next) {
datereport = req.query.datereport;
itemreport = req.query.itemreport; // this can be null for querying all items
req.getConnection(function(err, conn) {
if (err) return next("Cannot Connect");
var query = conn.query("SELECT SUM(total_profit) AS fee_total FROM transactions WHERE date_created = ? AND item = COALESCE(?, item)", [datereport, itemreport], function(err, rows) {
// do myStuff
});
});
});