这是我显示房间可用性的查询
SELECT
hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room.price,
room_price.date_start,
room_price.date_end,
room_price.price
FROM room
JOIN hotel on room.id_hotel = hotel.id_hotel
JOIN room_price on room.id_room = room_price.id_room
WHERE
(
room.id_room NOT IN
(
SELECT id_room FROM booking
WHERE
(
booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR
booking_end BETWEEN '2018-02-10' AND '2018-02-11' OR
'2018-02-10' BETWEEN booking_start AND booking_end OR
'2018-02-11' BETWEEN booking_start AND booking_end
)
)
)
AND (room.status = 1)
AND (hotel.kota="Bandung")
AND (room.position = "earth")
我从表格room
和表格room_price
当插入日期介于room_price.date_start
和room_price.date_end
之间时我需要1列价格,价格会从表格room_price
中显示
当room_price.date_start
和room_price.date_end
之间没有显示价格时,价格会从表格room
中显示
可以这样做吗?
修改
这个查询
SELECT
hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room_price.date_start,
room_price.date_end,
(
CASE WHEN
(
'2018-02-10' BETWEEN room_price.date_start AND room_price.date_end
)THEN
room.price = room_price.price
ELSE room.price = room.price END
) as price from room
JOIN hotel on room.id_hotel = hotel.id_hotel
JOIN room_price on room.id_room = room_price.id_room
WHERE
(
room.id_room NOT IN
(
SELECT id_room FROM booking
WHERE
(
booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR
booking_end BETWEEN '2018-02-10' AND '2018-02-11' OR
'2018-02-10' BETWEEN booking_start AND booking_end OR
'2018-02-11' BETWEEN booking_start AND booking_end
)
)
)
AND (room.status = 1)
AND (hotel.kota="Bandung")
AND (room.position = "earth")
但我得不到price
= room_price.price
答案 0 :(得分:2)
在,
之后的第9行之后错过room.price
,当您打开括号(
时,SQL认为您正在调用函数room.price()
答案 1 :(得分:1)
在SELECT中使用IF(IF)可以节省您的时间。
=QUERY(
'Form Responses 1'!$1:$1000,
" select A:G where C contains 'Sheet2'!$A1:$A26"
)
我不确定你是否需要room.id_room NOT IN(...)或不是,
hotel.nama_hotel,
hotel.kota,
room.id_room,
room.position,
room_price.date_start,
room_price.date_end,
IF('2018-02-10' BETWEEN room_price.date_start AND room_price.date_end, room_price.price, room.price)
FROM room
INNER JOIN hotel ON room.id_hotel = hotel.id_hotel
INNER JOIN room_price ON room.id_room = room_price.id_room
WHERE
room.id_room NOT IN(
SELECT id_room
FROM booking
WHERE
booking_start BETWEEN '2018-02-10' AND '2018-02-11' OR
booking_end BETWEEN '2018-02-10' AND '2018-02-11' OR
'2018-02-10' BETWEEN booking_start AND booking_end OR
'2018-02-11' BETWEEN booking_start AND booking_end
)
AND (room.status = 1)
AND (hotel.kota="Bandung")
AND (room.position = "earth")
将检查日期,如果是真的,那么将从room_price.price返回价格,如果是false,那么它将返回room.price。
更多关于它
https://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html