我的帖子表中有很多博客帖子。假设,
+----+----------------------+-------------------------+
| id | title | categories |
+----+----------------------+-------------------------+
| 1 | title 1 | 234, 235, 243 |
| 2 | title 2 | 237 |
| 2 | title 3 | 234, 243 |
+----+----------------------+-------------------------+
现在,我正在尝试选择类别243的所有帖子。我已经尝试使用FIND_IN_SET
函数,如果id是类别字段中的第一个数字,则可以选择帖子。
我目前的查询是这样的 -
SELECT * FROM posts WHERE FIND_IN_SET(235, Category) <> 0 ORDER BY PostId DESC
提前致谢。
答案 0 :(得分:3)
您应该知道将类别存储在此类列表中的想法有多糟糕。以下是一些原因:
因此,您应该修复数据以使用联结表。
有时,我们对其他人的糟糕设计决定感到震惊。
在这种情况下,问题会出现在列表中的空格中。试试这个:
WHERE FIND_IN_SET(235, replace(Category, ' ', '') > 0
或者,或者:
WHERE CONCAT(', ', 235, ', ') LIKE CONCAT('%, ', Category, ', %')
但是,我建议您正确使用关系数据结构并实现联结表。