如何使用逗号分隔值查询字段中的SQL行(数组值)?

Bap*_*ste 3 sql arrays

我有一个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查询应该是什么样的?

ilu*_*uxa 5

您的数据库设计违反了规范化法则#1:永远不会存储COMMA分离的列表.

你应该拥有的是:

  • id | 标签
  • 1 | 1
  • 1 | 373
  • 2 | 283
  • 2 | 4555
  • 2 | 308

等等

这样您的查询就变得如此简单

SELECT DISTINCT id 
FROM YourTable
WHERE tag NOT IN (1, 3)
Run Code Online (Sandbox Code Playgroud)

  • @Baptiste:我认为你最好把它作为一个新问题发布.答案将是尝试使用其他设计解决您的实际问题,并且不会与这些问题混淆.这个帖子对于教育其他人有好处,所以我会把它保留原样. (2认同)