我需要做一个非常复杂的搜索
上下文:我有3个表:房间、预订和room_reservation。第一个是酒店所有房间的信息,第二个是所有预订的信息,第三个是因为预订有多个房间。
我需要知道在一个特定的日期哪些房间是可用的,我真的关闭,我需要,如果至少有一个数据与搜索条件不匹配,那么相关的房间不会显示。
这是我的问题:
SELECT DISTINCT hab.* FROM habitacion hab
LEFT OUTER JOIN habitacion_reserva habr ON habr.id_habitacion = hab.id
LEFT OUTER JOIN reserva res ON res.id = habr.id_reserva
WHERE hab.tipo = 1
AND (((( '2018-06-10' not between res.fecha_ingreso and res.fecha_salida) AND ( '2018-06-17' not between res.fecha_ingreso and res.fecha_salida))
OR (res.fecha_ingreso is null OR res.fecha_salida is null)) OR ((( '2018-06-09' between res.fecha_ingreso and res.fecha_salida) OR ( '2018-06-17' between res.fecha_ingreso and res.fecha_salida)) AND res.estado = 4))
从理论上讲,查询是有效的,但是当我有很多预订时,查询只是返回所有房间。
发布于 2018-06-06 04:40:53
试试这样的东西(简化版)
Select * FROM rooms
LEFT JOIN room_reservation ON (rooms.id = rooms_reservation.id)
LEFT JOIN reservations ON (rooms_reservation.id = reservation.id)
reservation
WHERE 1=1
...
AND whateverfield = 1
....
AND ('2018-06-09' NOT BETWEEN reservation.start AND reservation.end)
AND ('2018-06-17' NOT BETWEEN reservation.start AND reservation.end)
GROUP BY rooms
https://stackoverflow.com/questions/50708233
复制相似问题