php - 使 SQL 查询仅选择 WHERE 条件之一
问题描述
我正在尝试在 PHP 中运行一个 SQL 查询,该查询应该基于以下两个字段返回一行:
- first_shown_date
- last_shown_date
我正在尝试根据以下条件选择一行:
last_shown_date
= 今天的日期,如果为假则:first_shown_date
= 0000-00-00,如果为假则: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
解决方案
将排名放在您的 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 吗?)
推荐阅读
- sql - 如何为 column1 中的每个相同值以及它们的数据以及它们在 column2 中的总和创建一个新列?
- javascript - Selenium IDE - 没有 assertConfirmation 的选择OkOnNextConfirmation?
- java - 有没有办法从 boxfuse 中提取我的源代码?
- java - 如何使用 java 创建 Multipart 文件
- python - 使字符串中的一个单词在QT中成为一种颜色
- sql-server - 如何匹配属于 2 个不同表的这些记录
- python - 如何在 plotly 中使用滑块更新 y 值(python)
- amazon-web-services - 缩减(关闭)实例上的 AWS Cloudwatch 事件
- java - 对于 java 中的每个循环,Iterator 等效项是什么?
- c# - 如何将作者拆分为 XML 列表