使SQL查询仅选择WHERE条件之一

时间:2019-02-01 20:11:26

标签: php sql if-statement conditional-statements

我正在尝试在PHP中运行一个SQL查询,该查询应根据以下两个字段返回一行:

  1. first_shown_date
  2. last_shown_date

我正在尝试根据以下条件选择一行:

  1. last_shown_date =今天的日期,如果为false,则:
  2. first_shown_date = 0000-00-00,如果为假,则:
  3. last_shown_date,其日期最早,将是默认日期

我当前的查询给了我错误的行,因为我将last_shown_date设置为今天的日期是一行,因此应该显示该行,但是实际显示的行却是日期最早的是last_shown_date

我似乎无法弄清楚这一点,而不是将其作为“ OR”,它在理想情况下将充当“ 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 :(得分:2)

将排名放在您的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为真时,表达的结果是1,我们更喜欢0(由排序降序)。

(顺便说一句:MySQL中的日期真的可以注册吗?)