Reputation: 529
and this is my query for showing avaibility of room
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")
and i got 2 column of price from table room
and table room_price
i need 1 column of price when inserted date is between room_price.date_start
AND room_price.date_end
and price appear from table room_price
when is not on between room_price.date_start
AND room_price.date_end
the price appear from table room
is that possible to do that ?
EDIT
this the query
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")
BUT i dont get the price
= room_price.price
Upvotes: 1
Views: 89
Reputation: 3498
USE IF() in your SELECT this would save your time.
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")
I'm not sure if you need room.id_room NOT IN (...) with it or not, as
IF('2018-02-10' BETWEEN room_price.date_start AND room_price.date_end, room_price.price, room.price)
Will check the date, if is it true, then will return the price from room_price.price, if is it false, then it will return room.price.
more about it
https://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html
Upvotes: 1
Reputation: 2524
you miss a ,
after the 9th line after room.price
, when you open a bracket (
, SQL think you are calling a function room.price()
Upvotes: 2