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

关联3张MySQL表,查询指定日期的可用时段

查询指定日期的可用时段

要实现列出指定日期的可用时段,核心思路是生成该日期下所有可能的时段,再排除已被预订的时段。以下是具体的MySQL查询方案:

基础查询语句

假设要查询的日期ID是@target_date_id(比如示例中的1或2),可以使用以下语句:

SELECT bt.id, bt.time
FROM bookings_times bt
CROSS JOIN bookings_dates bd
WHERE bd.id = @target_date_id
AND NOT EXISTS (
    SELECT 1
    FROM bookings b
    WHERE b.date_requested = bd.id
      AND b.time_requested = bt.id
);

语句解释

  1. CROSS JOIN bookings_dates:将目标日期与所有时段关联,生成该日期下的所有可能时段组合。
  2. NOT EXISTS子查询:检查该时段是否已被预订,若没有对应预订记录,则保留该时段,即为可用时段。

示例测试

  • 查询日期ID为1时:
    将@target_date_id替换为1,由于日期1的两个时段(9:00和9:15)均被预订,查询结果为空。
  • 查询日期ID为2时:
    将@target_date_id替换为2,此时仅时段2(9:15)被预订,返回结果:
    id | time
    1  | 9:00
    

可选优化:按实际日期查询

如果需要直接使用实际日期(如2022-11-06)而非日期ID查询,可修改语句:

SELECT bt.id, bt.time
FROM bookings_times bt
JOIN bookings_dates bd ON bd.id = bt.id
WHERE bd.date = '2022-11-06'
AND NOT EXISTS (
    SELECT 1
    FROM bookings b
    WHERE b.date_requested = bd.id
      AND b.time_requested = bt.id
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:31:00