php mysql复杂查询_半复杂的PHP / MySQL Select语句

我目前有3张桌子,我正在用这些桌子来预定某些设备.

这是我的桌子:

tblEquipment:

id name description

1 Camera Takes pictures

2 Projector Projects pictures

3 Laptop Portable Computer

tblEvents:

id start end first_name last_name email

1 2009-08-10 2009-08-11 John Doe jd@email.com

2 2009-08-15 2009-08-16 Jane Doe jd@email.com

tblEventData:

id eventID equipmentID

1 1 1

2 1 2

现在,用户将使用请求的时间提交查询,然后他们将看到所有可用的设备.

因此,使用上述示例,如果用户正在寻找8 / 10-8 / 11之间的设备,则他将看到唯一可用的设备是:equipmentID 3(笔记本电脑).

如何创建查询以仅根据请求的时间返回可用设备?

到目前为止,这是我想出的,但是无法使它起作用:

SELECT tblequipment.id as name, tblEvents.start as start, tblEvents.end as end

FROM tblEquipment

INNER JOIN tblEventData on tblEventData.equipmentID = tblEquipment.id

INNER JOIN tblEvents on tbleventdata.eventID = tblEvents.id

WHERE NOT EXISTS(SELECT * FROM tblEvents WHERE $end >= start AND $start <= end)

有任何想法吗?谢谢!

解决方法:

现在,您的查询具有一个NOT EXISTS,它仅查找在给定的开始时间和结束时间之间发生的事件.换句话说,“选择所有设备,只要在此时间范围内没有事件”.那不是你想要的.您需要:“选择所有设备,只要在此时间范围内没有使用该设备的事件.”

相当于:

SELECT tblequipment.id as name

FROM tblEquipment

WHERE NOT EXISTS

(SELECT * FROM tblEvents

INNER JOIN tblEventData ON (tblEvents.id = tblEventData.eventID)

WHERE $end >= start AND $start <= end

AND tblEventData.equipmentID = tblEquipment.id)

编辑:我还从外部查询中删除了JOIN,因为他们坚持只选择在某些时候保留的设备,这与您要回答的问题根本不相关.

您确实想知道保留了哪些设备,但是要在NOT EXISTS查询中,以将其从最终结果中排除.

标签:select,mysql,php

来源: https://codeday.me/bug/20191107/2003108.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值