【问题标题】:MySQL return items with joined tablesMySQL 返回带有连接表的项目
【发布时间】:2016-05-11 08:11:05
【问题描述】:

我正在做一个项目,我必须寻找在特定时刻免费的每个区域,但我对如何做到这一点有点困惑。

我有 2 张桌子。 区域预留

区域有: ID, 名字

预订有: ID, area_id, 开始日期, 结束日期

我要返回的是在特定日期没有预订的所有区域。知道该怎么做吗?

【问题讨论】:

  • 您要检查start_dateend_date 中的日期吗?
  • 你有代码吗?

标签: mysql date join


【解决方案1】:

尝试使用此查询:

SELECT a.name
FROM area AS a
LEFT JOIN reservation AS r ON r.area_id = a.id 
AND :myDate between r.start_date AND r.end_date 
WHERE r.id IS NULL

【讨论】:

    【解决方案2】:

    查询:

    $date = '2016-2-2';
    SELECT a.name
    FROM area AS a,
         reservation AS r
    WHERE (r.start_date <> '$date' OR r.end_date <> '$date')
    

    假设您的数据库中的日期格式为Y-m-d

    【讨论】:

    • 这似乎行不通。当根本没有保留时,它不会返回任何东西,而应该返回所有东西。当只有一个区域有预订时,它会将相同的 start_date 添加到所有其他区域。
    • 如果您添加具有预期结果的虚拟数据会很有帮助
    • 假设我有 3 个区域,A 区、B 区、C 区。A 区在 2016 年 2 月 2 日和 2016 年 2 月 4 日之间有预订。 B区和C区没有。当我在 2016 年 2 月 3 日请求所有免费区域时,我希望它只返回 B 和 C。
    • 那么输出应该是什么?
    • 只是区域的名称就可以了。目前,如果我请求 2016-2-3 和所有 3 个当我请求 2016-2-5
    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2013-02-18
    • 2012-06-09
    相关资源
    最近更新 更多