【问题标题】:Show all rooms and reservation显示所有房间和预订
【发布时间】:2014-08-18 07:55:29
【问题描述】:

我有三张桌子

  • 类型(id,诽谤)

  • 卧室(id、姓名、类型)

  • 预订(id、姓名、诽谤、开始日期、结束日期、房间)

我想创建一个应用程序,您可以在其中获取两个日期之间的所有房间和预订。我有以下查询

$sql = 'SELECT r.id, r.name, r.start_date, r.end_date, r.libel, r.statut ,c.name as room, t.libel as type '
            . 'FROM type t INNER JOIN Bedroom c ON t.id = c.type LEFT JOIN reservation r ON c.id = r.room'
            . 'WHERE ( :start_date BETWEEN r.start_date AND r.end_date '
            . ' OR :end_date BETWEEN r.start_date AND r.end_date'
            . ' OR r.start_date BETWEEN :start_date AND :end_date'
            . ' OR r.end_date BETWEEN :start_date AND :end_date) ORDER BY c.'.$orderColumn.' ASC';

但似乎房间是在 start_date 和 end_date 之间预订的。

【问题讨论】:

    标签: mysql join


    【解决方案1】:
    $sql = 'SELECT Reservation.*, Bedroom.*, Type.* FROM Reservation '
    . 'RIGHT JOIN Bedroom ON Reservation.room = Bedroom.id '
    . 'INNER JOIN Type ON Bedroom.Type = Type.id'
    . 'WHERE $someDate BETWEEN $startDate AND $endDate'
    . 'ORDER BY $orderColumn ASC;'
    

    这行得通吗?顺便说一句,您没有在SELECT 中使用AS 子句。你的:start_date:end_date 指的是什么?

    【讨论】:

    • 如果我使用 INNER JOIN 它只显示所有保留的房间。我也想显示所有房间和预订。
    • 那么您想使用RIGHT JOIN 和/或LEFT JOIN。有关说明,请参阅此链接 stackoverflow.com/questions/5706437/…。我编辑了上面的查询。
    • 问题是 WHERE 子句。它只查找具有保留日期的条目,即存在于您的 Reservation 表中的条目。您应该尝试添加OR (r.start_date IS NULL AND r.end_date IS NULL)。看看这是否有效?
    【解决方案2】:

    解决方案是将 WHERE 更改为 AND

    $sql = 'SELECT r.id, r.name, r.start_date, r.end_date, r.libel, r.statut ,c.name as room, t.libel as type '
            . 'FROM type t INNER JOIN Bedroom c ON t.id = c.type LEFT JOIN reservation r ON c.id = r.room'
            . 'AND( :start_date BETWEEN r.start_date AND r.end_date '
            . ' OR :end_date BETWEEN r.start_date AND r.end_date'
            . ' OR r.start_date BETWEEN :start_date AND :end_date'
            . ' OR r.end_date BETWEEN :start_date AND :end_date) ORDER BY c.'.$orderColumn.' ASC';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      相关资源
      最近更新 更多