gpt4 book ai didi

php - 如果 first 在 SELECT 查询中匹配,如何跳过其他 OR 条件?

转载 作者:行者123 更新时间:2023-11-29 01:40:36 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com