Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从逗号分隔的ID在MySQL中编写where子句查询_Php_Mysql_Where Clause - Fatal编程技术网

Php 从逗号分隔的ID在MySQL中编写where子句查询

Php 从逗号分隔的ID在MySQL中编写where子句查询,php,mysql,where-clause,Php,Mysql,Where Clause,我的帖子表中有很多博客帖子。假设 +----+----------------------+-------------------------+ | id | title | categories | +----+----------------------+-------------------------+ | 1 | title 1 | 234, 235, 243 | | 2 |

我的帖子表中有很多博客帖子。假设

+----+----------------------+-------------------------+
| id | title                | categories              | 
+----+----------------------+-------------------------+
| 1  | title 1              | 234, 235, 243           | 
| 2  | title 2              | 237                     |
| 2  | title 3              | 234, 243                |
+----+----------------------+-------------------------+
现在,我正在尝试选择所有类别为243的帖子。我已经尝试过使用
FIND_IN_SET
功能,如果id是categories字段中的第一个数字,该功能可以选择帖子

我当前的查询是这样的-
从PostId DESC中查找集合(235,类别)0顺序的帖子中选择*


提前感谢。

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

  • 将数字存储为字符串是不好的
  • SQL的字符串操作功能相对较差
  • 结果查询不能使用索引
  • 无法声明外键约束
因此,您应该修复数据以使用连接表

有时,我们会被其他人糟糕的设计决策所震惊

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

WHERE FIND_IN_SET(235, replace(Category, ' ', '') > 0
或者,或者:

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

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

在集合(243,类别)中查找应该在哪里工作。您确定键入了正确的列名吗<代码>在集合中查找(235,类别)great.works fine.:)我正在努力,但你们已经在我面前给出了答案,而且比我的答案更好。真棒的解决方案。谢谢。