- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 SELECT
中的 OR
条件上遇到了问题。
我想要一个简单的结果,如果一个条件匹配并且不应使用其余 OR
条件。
我想要的是:
我有一些用户共享记录,我想通过电子邮件将他们在我网站上共享的最新项目发送给他们。
For me: Newest Items will be least two days older
Like Today is 9th so i would like to pull all records of 7th. but if i didn't get any record of 7th then i would like to pull all record of 6th (3 days older from today). if i didn't get any records on 6th then i would like to pull 1 day older from today.
对于所有这些,我在我的 SELECT
查询中使用了 OR
,如下所示:
SELECT `tg`.* FROM `tblgallery` AS `tg` WHERE (
(tg.added_date BETWEEN '2014-07-07 00:00:00' AND '2014-07-08 00:00:00') OR
(tg.added_date BETWEEN '2014-07-06 00:00:00' AND '2014-07-07 00:00:00') OR
(tg.added_date BETWEEN '2014-07-08 00:00:00' AND '2014-07-09 00:00:00') )
我的数据库中有日期记录:
2014-07-06
2014-07-07
当我运行这个查询时,它会为我提供两个日期的所有记录。
但我只需要提取 2014-07-07
的记录,而不是两者的记录。(我上面已经提到过。)
我知道我可以通过使用多个 Select
来做到这一点,我认为一次又一次地请求数据库并不是一个好主意。
我的问题是:如果第一个匹配项为真,如何从数据库中提取数据?并跳过所有休息日期的数据?
或
还有其他方法吗?
请帮忙
最佳答案
通常只使用LIMIT
,这在这里不适用,因为每天可能有很多行。我所做的与 LIMIT
非常相似。
SELECT * FROM (
SELECT
tg.*,
@gn := IF(DATE(tg.added_date) != @prev_date, @gn + 1, @gn) AS my_group_number,
@prev_date := DATE(tg.added_date)
FROM tblgallery tg
, (SELECT @gn := 0, @prev_date := CURDATE()) var_init
ORDER BY FIELD(DATE(tg.added_date), CURDATE() - INTERVAL 1 DAY, CURDATE() - INTERVAL 3 DAY, CURDATE() - INTERVAL 2 DAY) DESC
) sq
WHERE my_group_number = 1;
这是它的工作原理。
用这条线
, (SELECT @gn := 0, @prev_date := CURDATE()) var_init
变量被初始化。
然后 ORDER BY
很重要! FIELD()
function对从 2 天前
(获取值 3)到 3 天前
(获取值 2)到 1 天前
(获取值 1)。其他所有值都为 0。
然后在 SELECT
子句中,顺序也很重要。
用这条线
@gn := IF(DATE(tg.added_date) != @prev_date, @gn + 1, @gn) AS my_group_number,
当当前行的日期与上一行的日期不同时,变量 @gn
递增。
用这条线
@prev_date := DATE(tg.added_date)
当前行的日期分配给变量@prev_date
。在上面的行中,它仍然具有前一行的值。
现在这些条目在 my_group_number
列中有一个 1
,它具有订单中的最新日期
2 days ago
3 days ago
yesterday
4 days ago
5 days ago
...
关于php - 如果 first 在 SELECT 查询中匹配,如何跳过其他 OR 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650352/
我是一名优秀的程序员,十分优秀!