Mysql 在CASE-SQL时添加语句
我有这样的桌子: 这是我关于显示房间可用性的问题Mysql 在CASE-SQL时添加语句,mysql,sql,Mysql,Sql,我有这样的桌子: 这是我关于显示房间可用性的问题 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 ro
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\u price
中得到了两列价格
当插入的日期介于房间价格之间时,我需要一列价格。日期开始
和房间价格。日期结束
和价格显示在表房间价格
在room\u price.date\u start
和room\u price.date\u 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\u price.price
你错过了,room.price后面第9行之后的,当你打开一个括号(
)时,SQL认为你在调用一个函数room.price()
在你的选择中使用IF(),这会节省你的时间
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")
我不确定你是否需要房间。房间是否不在(…)内,如图所示
IF('2018-02-10' BETWEEN room_price.date_start AND room_price.date_end, room_price.price, room.price)
将检查日期,如果是真的,则将从room_price.price返回价格,如果是假的,则将返回room.price
更多信息
这可以修复错误,但我无法从price\u room