You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨24小时时段数据展示优化:单记录替代双记录方案咨询

跨天时段数据展示的单条记录实现方案

我正在开发一个按指定日期时段展示数据的项目,例如:每周一18:00至周二03:00展示数据。目前需创建两条记录实现该需求:一条为周一18:00至23:59,另一条为周二00:00至03:00。请问是否可通过单条记录实现此类跨天时段的需求?当前用于获取数据的SQL查询如下:

// PHP Variables
$DayOfWeek = date('N');
$NowTime = date('H:i:s');
$NowDate = date('Y-m-d');
-- MySQL Query
SELECT RecordID, ClientImageName,FromDateTime,ToDateTime, Day1,Day2,Day3,Day4,Day5,Day6,Day7 
FROM Promotions2017 
WHERE ClientID = '".$ClientID."' 
  AND DisplayID = '".$DisplayID."'
  AND '".$NowTime."' BETWEEN FromTime AND ToTime 
  AND '".$NowDate."' >= FromDate AND '".$NowDate."' <= ToDate
  AND '".$DayOfWeek."' IN(Day1,Day2,Day3,Day4,Day5,Day6,Day7)

结论:可以用单条记录实现

现有SQL仅判断当天的星期几与时间区间,无法覆盖跨天场景。只需调整时间匹配逻辑,同时在单条记录中标记跨天涉及的星期几,就能实现需求。

核心思路

  • 当FromTime > ToTime时,判定为跨天时段(如18:00 > 03:00)
  • 跨天场景分两种匹配情况:
    1. 当前时间在FromTime至23:59:59,且当天是时段的起始星期几
    2. 当前时间在00:00:00至ToTime,且当天是时段的结束星期几
  • 非跨天场景保持原有逻辑即可

修改后的SQL查询

替换原时间与星期几的判断条件,新增跨天场景的匹配逻辑:

SELECT RecordID, ClientImageName, FromDateTime, ToDateTime, Day1, Day2, Day3, Day4, Day5, Day6, Day7 
FROM Promotions2017 
WHERE ClientID = '".$ClientID."' 
  AND DisplayID = '".$DisplayID."'
  AND '".$NowDate."' >= FromDate AND '".$NowDate."' <= ToDate
  AND (
    -- 非跨天场景:正常匹配当天星期几和时间区间
    (FromTime <= ToTime 
     AND '".$NowTime."' BETWEEN FromTime AND ToTime 
     AND '".$DayOfWeek."' IN(Day1, Day2, Day3, Day4, Day5, Day6, Day7))
    OR
    -- 跨天场景:匹配起始日晚段或次日早段,同时对应星期几需存在
    (FromTime > ToTime 
     AND (
       -- 情况1:当前是起始日,时间在FromTime到23:59:59
       ('".$NowTime."' >= FromTime AND '".$DayOfWeek."' IN(Day1, Day2, Day3, Day4, Day5, Day6, Day7))
       OR
       -- 情况2:当前是次日,时间在00:00:00到ToTime,且次日星期几在记录中
       ('".$NowTime."' <= ToTime AND '".($DayOfWeek % 7 + 1)."' IN(Day1, Day2, Day3, Day4, Day5, Day6, Day7))
     )
    )
  )

注:($DayOfWeek %7 +1)用于计算次日的星期数(因date('N')返回1-7,周日(7)的次日为周一(1))

单条记录配置示例

针对「每周一18:00至周二03:00」的需求,单条记录关键字段配置:

  • FromTime = 18:00:00
  • ToTime = 03:00:00
  • Day1 = 1(周一)、Day2 = 2(周二),其余Day字段留空或设为0

额外优化建议

  • 防范SQL注入:现有代码直接拼接变量到SQL中存在风险,建议改用PDO预处理语句或MySQLi绑定参数。
  • 简化星期字段:可将Day1-Day7合并为单个WeekDays字段(如逗号分隔字符串1,2或整数位掩码),减少表结构冗余。

内容的提问来源于stack exchange,提问作者DCJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:13:17