Сделайте запрос SQL, выбрав только одно из условий WHERE - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь запустить SQL-запрос в PHP, который должен вернуть одну строку на основе следующих двух полей:

  1. first_shown_date
  2. last_shown_date

Я пытаюсь выбрать одну строку на основе следующих условий:

  1. last_shown_date = сегодняшняя дата, если false, то:
  2. first_shown_date = 0000-00-00, если false, то:
  3. last_shown_date с самой старой датой, это будет значение по умолчанию

Запрос, который у меня есть, дает мне неправильную строку, так как у меня есть однастрока с last_shown_date, установленным на текущую дату, так что это строка, которая должна отображаться, но строка, которая фактически отображается, является строкой с самой старой датой в last_shown_date.

Я не могупонять это, вместо того, чтобы быть «ИЛИ», в идеале он будет функционировать как оператор «IF ELSE», так что, если правило # 1 не выполнено, то выберите следующее, но если правило # 1 истинно, то используйте этоодин, а не следующий.Я попробовал операторы if и CASE, но они не работали так, как нужно.

Вот код, который у меня есть на данный момент:

    SELECT 
    `id`,
    `content`

    FROM `".USED_TBL."` 

    WHERE 
    `last_shown_date` = '$dateDB' OR (`last_shown_date` != '$dateDB' AND
    `first_shown_date` = '0000-00-00' OR(`first_shown_date` != '0000-00-00' AND
    `last_shown_date` < '$dateDB'))
    AND `status` != 2

    ORDER BY
    `last_shown_date` ASC
    LIMIT 1

1 Ответ

0 голосов
/ 01 февраля 2019

Поместите ранжирование в предложении ORDER BY:

ORDER BY
  (last_shown_date = CURRENT_DATE) DESC,
  (first_shown_date = DATE '0000-00-00') DESC,
  last_shown_date
LIMIT 1

Это использует MySQL true = 1, false = 0, например, когда last_shown_date = CURRENT_DATE равно true, результат выражения равен 1, что мы предпочитаемболее 0 (в порядке убывания).

(Кстати: может ли дата в MySQL быть на самом деле 0000-00-00?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...