【发布时间】:2021-12-06 19:03:12
【问题描述】:
How can I implement a boolean tag search in SQL?
这个问题与我能找到的差不多,但有几个。
我知道的唯一真正的解决方案是通过后端代码生成这样的查询并将其放入 SQL,但我想它很慢,我也想知道是否有其他方法可以做到这一点(例如一个主查询而不是多个)。
还有可能使用IN 或类似的解决方案:
How to query data based on multiple 'tags' in SQL?
我无法使用典型的GROUP BY HAVING COUNT 解决方案,因为它无法在具有标签列表的上下文中运行,正如该用户指出的那样:Implementing a tag search with operands
我应该指定大多数现有解决方案都不起作用,因为我正在寻找能够进行更复杂查询的东西,例如括号分组和嵌套操作数。
架构是“毒药”http://howto.philippkeller.com/2005/04/24/Tags-Database-schemas/
SELECT id AS post_id
FROM posts
WHERE EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS 'random')
AND NOT (
EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS 'query') AND
EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS '1')
)
AND EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS '2')
AND EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS '3')
AND EXISTS (SELECT name FROM tags WHERE post IS post_id AND name IS 'racecar')
【问题讨论】:
-
你还有什么问题。您已经链接了几个问题,但我不明白您为什么不能使用它们。
-
@SalmanA 我正在尝试找到一种更快或一般替代方法来执行此操作,但其中一些根本不起作用。
-
好吧,为了更快,您首先需要确定当前解决方案是否缓慢。不过,如果可以接受的话,我会发布一个替代方案。
标签: sql database many-to-many relational-division