gpt4 book ai didi

mysql - 检查一个查询中给定日期之前和之后是否存在日期

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

这是一个 Mysql/sql 查询问题,但请允许我解释一下上下文:我想为我的 PHP 日历配备一个“< PREV”和“NEXT >”按钮,允许用户轻松转到上一个或下一个可用的月份有可用的数据库条目。如果没有可用的数据库条目,我想禁用该按钮(我绝不希望系统显示空日历)。

示例:用户看到了 FEB。 JAN 和 MAR 不包含条目,但 DEC 和 APR 包含条目。然后需要“下一步 >”按钮切换到四月日历。 '

所以基本上我正在寻找一个单一的高效查询,它可以检查条目是否存在于 View 月份之前和之后(但不是部分月份)。

该表有一个日期类型为“Y-m-d”的字段“logDate”。

我开始摸索以下查询,首先检查给定日期前后是否存在日期,但我知道此查询存在一些问题。首先,如果表中有“2013-03-19”的条目,我的查询将吐出一个 1 for prev - 这当然不表示条目是否存在于 3 月之前的几个月。

SELECT IF( EXISTS(SELECT dayId FROM LogbookDay 
WHERE logDate < '2013-03-20' AND userId = 2), 1, 0) as prev,
IF( EXISTS(SELECT dayId FROM LogBookDay WHERE logDate > '2013-03-20'
AND userId = 2), 1, 0) as next

最佳答案

修改起始日期为月初和月末:对于 prev,您修改为该月的第一天,方法是从该月的当前日期减去 1。接下来,您执行相同的操作,然后添加 1 个月:

SELECT 
(SELECT dayId FROM LogbookDay WHERE
logDate < ADDDDATE('2013-03-20', 1-DAY('2013-03-20')) AND userId = 2
ORDER BY logDate DESC LIMIT 1
) as PREV,
(SELECT dayId FROM LogBookDay WHERE
logDate >= ADDDATE(ADDDDATE('2013-03-20', 1-DAY('2013-03-20')), INTERVAL 1 MONTH) AND userId = 2
ORDER BY logDate ASC LIMIT 1
) as NEXT

(或者,在 PHP 中执行此操作,因为它可能会产生更具可读性的代码。)

根据结果是空值还是日期,以不同方式显示链接。

如果你提取日期而不是 ID 可能会更优雅:

    SELECT 
(SELECT MAX(logDate) FROM LogbookDay WHERE
logDate < ADDDDATE('2013-03-20', 1-DAY('2013-03-20')) AND userId = 2
) as PREV,
(SELECT MIN(logDate) FROM LogBookDay WHERE
logDate >= ADDDATE(ADDDDATE('2013-03-20', 1-DAY('2013-03-20')), INTERVAL 1 MONTH) AND userId = 2
) as NEXT

但这取决于您对找到的信息所做的具体操作。如果您所做的只是创建一个指向新月份的链接,那么提取不在同一月份的最近日期应该可以解决问题。

关于mysql - 检查一个查询中给定日期之前和之后是否存在日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554061/

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