简体   繁体   English

MySQL有时会搜索null

[英]mySQL sometimes search for null

I have a slight issue with mySQL: 我的mySQL有一个小问题:

   if ($rooflightReportSalesReleaseFromDate !== "" ) {
       $sql .= "AND (date(orderRelease.Sales_Release_Date)) >= '" . $rooflightReportSalesReleaseFromDate
             . "' OR orderRelease.Sales_Release_Date IS NULL" ;
   }
   if ($rooflightReportSalesReleaseToDate !== "") {
       $sql .= " AND (date(orderRelease.Sales_Release_Date)) <= '" . $rooflightReportSalesReleaseToDate
       . "' OR orderRelease.Sales_Release_Date IS NULL";
   }

$rooflightReportSalesReleaseToDate and $rooflightReportSalesReleaseFromDate will sometimes be blank, but i'm fiding if both dates have values it's still returning null (probably because the OR statements). $ rooflightReportSalesReleaseToDate和$ rooflightReportSalesReleaseFromDate有时为空,但是我想知道两个日期是否都具有值,但它仍返回null(可能是因为OR语句)。 Is there a way i can get it to handle the null/blank records because i'm getting errors if i don't have the or statements in (or the null check is on its own) 有没有一种方法可以让我处理空/空记录,因为如果我没有or语句(或者空检查是独立的),我会报错

Thanks. 谢谢。

You're mixing AND and OR so it is most likely an operator precedence issue. 您正在混合AND和OR,因此很可能是运算符优先级问题。 Just add parenthesis around OR operations: 只需在OR运算符周围加上括号即可:

if ($rooflightReportSalesReleaseFromDate !== "" ) {
    $sql .= "AND (
        date(orderRelease.Sales_Release_Date) >= '" . $rooflightReportSalesReleaseFromDate . "'
        OR orderRelease.Sales_Release_Date IS NULL
    )" ;
}
if ($rooflightReportSalesReleaseToDate !== "") {
    $sql .= " AND (
        date(orderRelease.Sales_Release_Date) <= '" . $rooflightReportSalesReleaseToDate . "'
        OR orderRelease.Sales_Release_Date IS NULL
    )";
}

Having said that, assuming that Sales_Release_Date contains date+time but the variables contain date only, you can eliminate the date() cast like so: 话虽如此,假设Sales_Release_Date包含date + time,但变量仅包含date,则可以像这样消除date()

if ($rooflightReportSalesReleaseFromDate !== "" ) {
    $sql .= " AND (orderRelease.Sales_Release_Date >= '" . $rooflightReportSalesReleaseFromDate . "' OR orderRelease.Sales_Release_Date IS NULL)" ;
}
if ($rooflightReportSalesReleaseToDate !== "") {
    $sql .= " AND (orderRelease.Sales_Release_Date < '" . $rooflightReportSalesReleaseToDate . "' + INTERVAL 1 DAY OR orderRelease.Sales_Release_Date IS NULL)";
    // check for less than only -------------------^                                              ^
    // add one day to end date --------------------------------------------------------------------
}

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

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