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
總結
以上是生活随笔為你收集整理的php mysql复杂查询_半复杂的PHP / MySQL Select语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python包和目录有什么不同_pyth
- 下一篇: linux cmake编译源码,linu