gpt4 book ai didi

mysql - 如何通过 'tag' 属性对数据库实体进行高级过滤

转载 作者:行者123 更新时间:2023-11-29 16:14:48 25 4
gpt4 key购买 nike

这个问题困扰了一段时间,非常感谢您的建议

假设我在这里有一个个人博客数据库:

第一个表:

CREATE TABLE posts(
pid TINYINT,
content TEXT,
PRIMARY KEY (pid)
);

第二个表:

CREATE TABLE tags(
pid TINYINT,
tag VARCHAR(16),
PRIMARY KEY (pid, tag),
FOREIGN KEY (tag) REFERENCES posts(pid)
);

并说他们有一些数据,例如

tags

------------------------------
pid | tag
1 | a
1 | b
1 | d

2 | a
2 | c

我想允许客户端(用户)进行“高级过滤”

就像使用 SELECT pid FROM Tags WHERE tag `MATCHES` a && ( b || c ) && !d 来完全匹配 pid 2

最佳答案

WHERE tagMATCHESa && ( b || c ) && !d 的相当直接的映射是

WHERE     ( EXISTS SELECT 1 FROM tags WHERE pid = a.pid AND tag = 'a' )
AND ( EXISTS SELECT 1 FROM tags WHERE pid = a.pid AND tag IN ('b', 'c') )
AND NOT ( EXISTS SELECT 1 FROM tags WHERE pid = a.pid AND tag = 'd' )

但是,由于它是多个相关子查询,因此无法很好地扩展。这对于几千行来说可能足够有效,但如果您需要数百万行,那么我们需要讨论更复杂的方法。

关于mysql - 如何通过 'tag' 属性对数据库实体进行高级过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54924175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com