Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS-MySQL:当第二个参数为null时进行查询_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript NodeJS-MySQL:当第二个参数为null时进行查询

Javascript NodeJS-MySQL:当第二个参数为null时进行查询,javascript,mysql,node.js,Javascript,Mysql,Node.js,当第二个或任何下一个参数但第一个参数为空时,是否可以完成mySQL查询 例如,我根据给定的日期(datereport)为单个项目(itemreport)生成报告 现在,如果前端没有选择任何项,并且其req.query.itemreport获取null,则必须执行查询的其余部分,因为用户请求了所有项,而不是单个项,并且没有停止执行,因为它获取了null参数(itemreport) 更新 添加了修复,添加了查询字符串。连我都错过了:) 更新 添加了修复,添加了查询字符串。连我都错过了:) COALE

当第二个或任何下一个参数但第一个参数为空时,是否可以完成mySQL查询

例如,我根据给定的日期(
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
        });
    });
});