我有一个SQL表,看起来像这样:
id_question(int) | 标签(varchar)
其中"tags"字段是
- 为空:NULL
- 或者用一个值(例如:1)(不是数字)
填充 - 或者用几个逗号分隔的值填充(例如:273,2308,24)(不是数字)
id_question(int) | 标签(varchar)
1 | 1,373
2 | 283,4555,308,12
3 | 283,25,3
我有一个blacklisted_tags数组.我想检索其标签字段没有列入黑名单的$ tags_blacklist值的所有问题的id_questions.
例如:
$ tags_blacklist = array(1,3)
=>我应该得到2
而不是1,因为它的标签字段中有1
而不是3,因为它的标签字段中有3个.
我的SQL查询应该是什么样的?
您的数据库设计违反了规范化法则#1:永远不会存储COMMA分离的列表.
你应该拥有的是:
等等
这样您的查询就变得如此简单
SELECT DISTINCT id
FROM YourTable
WHERE tag NOT IN (1, 3)
Run Code Online (Sandbox Code Playgroud)