首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >半复杂的PHP/MySQL Select语句

半复杂的PHP/MySQL Select语句
EN

Stack Overflow用户
提问于 2009-08-19 23:37:32
回答 2查看 255关注 0票数 3

我目前有3张桌子,我用它来为人们预订某些设备。

下面是我的表格:

代码语言:javascript
运行
复制
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(笔记本电脑)。

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

这就是我到目前为止想出的方法,但不能让它工作:

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

有什么想法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-19 23:39:49

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

翻译过来就像这样:

代码语言:javascript
运行
复制
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查询中保留了哪些设备,以便将其从最终结果中排除。

票数 2
EN

Stack Overflow用户

发布于 2009-08-19 23:45:16

"end“是SQL中的保留字。尝试将tblEvents.end命名为其他名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1303197

复制
相关文章

相似问题

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