這似乎是一個奇怪的問題,但在這裏不用...MySQL多對多設置 - 如何將布爾表達式轉換爲MySQL?
我有一個類似的表結構:
Object
id, name
Tag
id, name
ObjectTag
object_id, tag_id
我想要做的是採取布爾值像
((1 OR 2) AND (3)) AND (!4 AND !5)
並將其轉換爲有效的MySQL查詢。這些布爾表達式中的數字代表tag_id
s。我們希望能夠找到滿足布爾表達式的所有object_id
。
在這種情況下,如果我們有object1
是有tag1
和tag3
,但沒有任何關係tag4
,或tag5
,我們會找回來的return語句。
同樣,如果我們有object2
是有tag2
和tag3
,但也有tag4
,我們不會再回來了,因爲AND (!4 AND !5)
意味着我們不希望一個object_id
返回,如果它在這些標籤之一。
我認爲布爾表達式的邏輯足夠簡單,但將其轉換爲MySQL中不使用大量EXISTS語句的內容,並且有點簡單,似乎並不存在(對於我而言,經驗)。
在附註上,表達式可能更先進(和嵌套)。我也得到這個輸入並以編程方式解析它。
與此相似的另一個問題是Boolean expressions for a tagging system in SQL。我對這個問題的問題是,它非常具體(我試圖採取一種程序化方法),對我來說似乎相當複雜,但我不確定是否可以避免這種情況,因此我寫了這個問題。
我不能相信你是如何簡單地做出這個查詢......這太棒了!謝謝您的意見!我真的過分複雜這件事。所以,既然我不知道MySQL的情況,那麼「具有」究竟是做什麼的?我從來沒有見過... –
@NicholausChipping。 。 。 'having'就像'where'子句一樣工作,只有它在* group by之後執行,所以它可以用於聚合函數。 –