MySQL иногда ищет null

У меня небольшая проблема с 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 и $rooflightReportSalesReleaseFromDate иногда будут пустыми, но я уверен, что если обе даты имеют значения, они все еще возвращают значение null (вероятно, из-за операторов ИЛИ). Есть ли способ заставить его обрабатывать нулевые/пустые записи, потому что я получаю ошибки, если у меня нет операторов или (или нулевая проверка сама по себе)

Спасибо.

распечатайте полное Заявление и поделитесь им

Jens 30.01.2019 11:33

привет Йенс, см. отредактированный вопрос для полного заявления

AisRuss 30.01.2019 11:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы смешиваете И и ИЛИ, поэтому, скорее всего, это проблема приоритета оператора. Просто добавьте круглые скобки вокруг операций ИЛИ:

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
    )";
}

Сказав это, предполагая, что Sales_Release_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 --------------------------------------------------------------------
}

Спасибо! это устроило!

AisRuss 30.01.2019 12:05

Другие вопросы по теме