我正在尝试在PHP中运行一个SQL查询,该查询应根据以下两个字段返回一行:
我正在尝试根据以下条件选择一行:
last_shown_date
=今天的日期,如果为false,则:first_shown_date
= 0000-00-00,如果为假,则: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
答案 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中的日期真的可以注册吗?)