首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MYSQL如果至少有一个结果不匹配,则将其从

MYSQL如果至少有一个结果不匹配,则将其从
EN

Stack Overflow用户
提问于 2018-06-06 04:12:39
回答 1查看 27关注 0票数 0

我需要做一个非常复杂的搜索

上下文:我有3个表:房间、预订和room_reservation。第一个是酒店所有房间的信息,第二个是所有预订的信息,第三个是因为预订有多个房间。

我需要知道在一个特定的日期哪些房间是可用的,我真的关闭,我需要,如果至少有一个数据与搜索条件不匹配,那么相关的房间不会显示。

这是我的问题:

代码语言:javascript
复制
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))

从理论上讲,查询是有效的,但是当我有很多预订时,查询只是返回所有房间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 04:40:53

试试这样的东西(简化版)

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档