我有一個非常大的SQL查詢來檢查通知,並且我在表中有幾種不同類型的通知:IE,posts,likes,comments,photoComments,photoLikes,videoLikes (總是增加更多)而且我遇到了問題,我不確定如何最好地做到這一點。到目前爲止,我所做的工作方式是完美的,並且非常容易添加,但是這一個通知類型我必須檢查更多的其他表格,我必須檢查兩個其他表格,我不能檢查其他表格讓它工作。複雜的SQL查詢,檢查多個表中的列值
所以在這裏,它是:(這是我的巨大的查詢中,只有相關的部分真正的只是其中的一部分)
n.uniqueID = ANY (
SELECT photos.id
FROM photos INNER JOIN posts ON (photos.id=posts.post)
WHERE photos.state=0
AND posts.state=0
AND posts.id = ANY (
SELECT likes.postID FROM likes
INNER JOIN posts ON (posts.id=likes.postID)
WHERE likes.state=0 AND posts.state=0
)
)
所以基本上我真正需要做的是檢查每個表,因爲state
列說它是否被刪除(如果它不是0,那麼它被刪除,不應該返回) 所以它會像:
IF photos.state=0 AND posts.state=0 AND likes.state=0
返回它。
n.uniqueID
,posts.post
和photo.id
都將是相同的 值。posts.id
和likes.postID
也將是相同的值。
我的問題是,它似乎沒有檢查likes.state
,我不認爲。
只是想到了這些 - 這些子查詢可能會變得非常昂貴。根據你的情況,如果可能的話,你可能會考慮做更多更小的查詢。這並不總是一個好建議,因爲它取決於你的具體情況,但是做2或3個查詢而不是一個深度嵌套的查詢通常會更有效率。 YMMV – Madbreaks
感謝您的想法,我知道你在說什麼,但我花了很長時間重新編碼這個查詢這個特定的系統,這似乎是最好的/最簡單的方式,我和許多計算器用戶能夠出現。上面這個大的查詢只是這個特定查詢中的七個之一(並且正在增長)。 –