这似乎是一个奇怪的问题,但现在。。。
我有一个类似的表结构:
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
和
标签3
,但也有
标签4
,我们不会退还,因为
AND (!4 AND !5)
意味着我们不想要
对象id
如果它有这些标记之一,则返回。
我认为布尔表达式的逻辑足够简单,但在MySQL中将其转换为不使用一整串EXISTS语句且有些简单的东西似乎并不存在(对我来说,我的经验有限)。
顺便提一下,表达式可能更高级(和嵌套)。我还将获取此输入并以编程方式对其进行解析。
与此类似的另一个问题是
Boolean expressions for a tagging system in SQL
。我对这个问题的问题是,它非常具体(我试图采用程序化的方法),对我来说似乎很复杂,但我不确定是否可以避免,因此我写了这个问题。