用逗号分隔的 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。
我的帖子中有很多博文 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。