gpt4 book ai didi

javascript - mySQL:如果文本列包含黑名单上的项目,则选择行

转载 作者:行者123 更新时间:2023-12-02 21:14:34 25 4
gpt4 key购买 nike

我正在尝试创建一个查询,该查询可以从我的数据库中选择包含黑名单标签的所有帖子,除非该帖子包含白名单标签。标签存储在文本列中(即 "tag1 tag2 tag3 ")。

以这个伪代码为例:

let whitelist = ['tag1', 'tag3', 'tag5'];
let blacklist = ['tag2', 'tag4', 'tag6'];

connection.query('SELECT * FROM `posts` WHERE `tags` CONTAINS BLACKLIST TAG AND NOT WHITELIST TAG;', function (err, results) {
// Returns all posts that have a blacklisted tag unless the post contains a tag on the whitelist
});

是否可以使用白名单和黑名单的内容生成查询来选择包含黑名单标签的帖子,除非它们包含白名单标签?

最佳答案

这里最好的做法是正确规范您的标签,并且不要使用空格分隔的值列表。如果您坚持使用该格式,则可以使用正则表达式来查找标签列表内每个数组中的值之一。您可以使用以下方法从 whitelistblacklist 数组创建正则表达式:

whitelist_regex = ' ' + whitelist.join(' | ') + ' ';
blacklist_regex = ' ' + blacklist.join(' | ') + ' ';

那么你的查询就变成了

connection.query('SELECT * FROM `posts` WHERE `tags` RLIKE ? AND `tags` NOT RLIKE ?', 
[ blacklist_regex, whitelist_regex ],
function (err, results) {
// ...
});

更新

如果标签字段看起来像 tagtype:tag 形式的一系列空格分隔值,您可以更改两个正则表达式以匹配该格式:

whitelist_regex = ':' + whitelist.join(' |:') + ' ';
blacklist_regex = ':' + blacklist.join(' |:') + ' ';

关于javascript - mySQL:如果文本列包含黑名单上的项目,则选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004604/

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