php - 检查酒店房间的可用性

标签 php sql

我的数据库中有两个表。第一张 table 是房间,第二张 table 是预订。在我房间的 table 上

id room_no type rate
1  13       1b  1000
2  14       2b  2000
3  15       3b  3000
4  16       1b  1000
5  17       2b  2000
6  18       3b  3000

在我的预订表中

id room_no check_in     check_out
1   13     23-2-2016     24-2-2016
2   14     24-2-2016     25-2-2016
1   13     25-2-2016     26-2-2016
1   13     27-2-2016     29-2-2016
1   13     1-3-2016      2-3-2016
1   13     7-3-2016      7-3-2016

"SELECT room_no,type,rate 
             FROM room 
             WHERE room_no not in 
             (select IFNULL(GROUP_CONCAT(room_no),0) 
             FROM reservation 
             WHERE check_out >= '$check_in' AND check_in <= '$check_out')"

当我选择一个日期 24-2-2016 到 27-2-2016 然后它显示

room_no check_in     check_out

  14     24-2-2016     25-2-2016
  15     25-2-2016     26-2-2016
  16     27-2-2016     29-2-2016
  17     1-3-2016      2-3-2016
  18     7-3-2016      7-3-2016

但我想要所有可用的房间。

最佳答案

要获取指定时间段内的已占用房间,即 '2016-02-27'-'2016-02-24',您可以使用:

SELECT DISTINCT room_no
FROM reservation
WHERE check_in <= '2016-02-27' AND check_out >= '2016-02-24'

输出:

room_no
=======
13
14

要获得可用房间,您可以像这样使用之前的查询:

SELECT *
FROM room
WHERE room_no NOT IN (
   SELECT DISTINCT room_no
   FROM reservation
   WHERE check_in <= '2016-02-27' AND check_out >= '2016-02-24')

输出:

id, room_no, type, rate
=======================
3,   15,     3b,   3000
4,   16,     1b,   1000
5,   17,     2b,   2000
6,   18,     3b,   3000

Demo here

关于php - 检查酒店房间的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570985/

相关文章:

php - 以2个数字命名的Mysql表

php - 不能对数据库中的选择数据使用限制

php - 在 laravel 中访问动态数据库

mysql - mySQL 工作台中的存储过程(INSERT INTO 错误)

sql - 2. 不相关表连接的优化

sql - 如何计算 PostgreSQL 表中所有行的日期差异?

mysql - 案例 When 案例之间的联合

php - Facebook 扩展权限

php - 即使在上传新图像后仍显示旧图像

SQL:修改具有唯一值的查询结果行