用逗号分隔的 ID 在 MySQL 中写入 where 子句查询

write where clause query in MySQL from comma separated IDs

我的帖子中有很多博文 table。假设,

+----+----------------------+-------------------------+
| id | title                | categories              | 
+----+----------------------+-------------------------+
| 1  | title 1              | 234, 235, 243           | 
| 2  | title 2              | 237                     |
| 2  | title 3              | 234, 243                |
+----+----------------------+-------------------------+

现在,我正在尝试 select 所有类别为 243 的帖子。我已经尝试使用 FIND_IN_SET 函数,如果 id 是类别中的第一个数字,该功能可以 select 帖子场.

我当前的查询是这样的- SELECT * FROM posts WHERE FIND_IN_SET(235, Category) <> 0 ORDER BY PostId DESC

提前致谢。

您应该知道在这样的列表中存储类别是多么糟糕的想法。以下是一些原因:

  • 将数字存储为字符串是不好的。
  • SQL字符串操作函数比较差
  • 生成的查询不能使用索引。
  • 无法声明外键约束。

因此,您应该修复数据以使用联结 table。

有时,我们会对其他人糟糕的设计决策感到震惊。

在这种情况下,问题应该是列表中的空格。试试这个:

WHERE FIND_IN_SET(235, replace(Category, ' ', '') > 0

或者,或者:

WHERE CONCAT(', ', 235, ', ') LIKE CONCAT('%, ', Category, ', %')

但是,我鼓励您正确使用关系数据结构并实现联结 table。