簡體   English   中英

選擇日期之間的房間可用性(SQL查詢)

[英]Select room availability between date (sql Query)

我對SQL查詢有問題。 我正在尋找輸入表單中日期之間的可用空間。

這是表模式:

餐桌間

  • id_room,room_name,alootment
  • 例如:1,vip,10

價格表

  • id_price,id_room,價格,日期

  • 例如:1、1、10、2014-05-1 | 1,1,20,2014-05-2 | 1,1,10,2014-05-3

餐桌預訂

  • id_booking,id_room,日期
  • 例如:2014年1月1日,1 | 2,1,2014-05-1 | 3,1,2014-05-1

我正在尋找的是:

如果有人在2014-5-12014-05-3預訂VIP房間,房間數量為8

然后返回空白(因為vip房間有10個分配空間,並且在2014-05-1上有3個預訂,所以只剩下7個房間)

這是SQL查詢

select room_name, COUNT( SELECT FROM booking WHERE date between '$checkin' and '$checkout') as total_booking, from room where allotment <= total_boking

這是MySQL嗎?

語法錯誤; 此外, date是保留名稱。 請參閱下面的修訂表和SQL。

SELECT
    room.room_name,
    (SELECT COUNT(*) FROM booking WHERE booking.booking_date BETWEEN '' AND '') AS     total_booking
FROM
room
WHERE room.allotment <= (SELECT COUNT(*) FROM booking WHERE booking.booking_date BETWEEN '' AND '')

這是表模式;

-- ----------------------------
-- Table structure for `booking`
-- ----------------------------
DROP TABLE IF EXISTS `booking`;
CREATE TABLE `booking` (
`id_booking` int(10) NOT NULL,
`id_room` int(10) NOT NULL,
`booking_date` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


-- ----------------------------
-- Table structure for `price`
-- ----------------------------
DROP TABLE IF EXISTS `price`;
CREATE TABLE `price` (
`id_price` int(10) NOT NULL,
`id_room` int(10) NOT NULL,
`price` int(10) NOT NULL,
`price_date` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


-- ----------------------------
-- Table structure for `room`
-- ----------------------------
DROP TABLE IF EXISTS `room`;
CREATE TABLE `room` (
`id_room` int(10) NOT NULL,
`room_name` varchar(100) NOT NULL,
`allotment` int(10) NOT NULL,
PRIMARY KEY (`id_room`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

我傾向於將您的查詢寫為:

select room_name,
       (SELECT COUNT(*)
        FROM booking b
        WHERE b.id_room = r.id_room and date between '$checkin' and '$checkout'
       ) as total_booking
from room r
having allotment <= total_booking;

請注意,子查詢現在與外部查詢相關聯,因此total_booking適用於每個房間。

這也使用MySQL擴展,您可以在其中使用select子句中定義的列別名來通過where子句進行過濾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM