Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 选择工作不正常的位置_Mysql_Locate - Fatal编程技术网

Mysql 选择工作不正常的位置

Mysql 选择工作不正常的位置,mysql,locate,Mysql,Locate,不知道该怎么解释。我有下面的样品表 id participants 13 128, 125 18 122, 125 29 182, 125 34 17, 12 38 18, 15 我想得到右边有12条消息的数量,所以我使用下面的查询,从表中选择count(id)as messages from table where locate(12,participants,2) 这个查询的问题

不知道该怎么解释。我有下面的样品表

id          participants
13          128, 125
18          122, 125
29          182, 125
34           17, 12
38           18, 15
我想得到右边有12条消息的数量,所以我使用下面的查询,从表中选择count(id)as messages from table where locate(12,participants,2)
这个查询的问题是,它返回的所有结果都是12,例如125,因此我没有一个计数,而是有4个计数,这是不正确的。关于使用什么查询有什么建议吗?

您可以使用子字符串_INDEX和“
”,“
作为分隔符来获得结果:

SELECT * FROM your_table
WHERE
    SUBSTRING_INDEX(participants, ', ', -1) = 12;

如果你不能确定逗号后面的空白,你可以使用< /P>

SELECT * FROM your_table
WHERE
    TRIM(SUBSTRING_INDEX(participants, ',', -1)) = 12;
相反

注意
如果可以的话,最好不要将分隔的值列表存储在一个字段中。这会带来麻烦和糟糕的性能,因为MySQL不能在这种情况下使用索引。Marc的合理建议是规范化您的表,消除此问题,并通过使用索引来提高性能。

FIND\u IN\u SET()
用于此类操作,但您也需要去掉空格,因为它们不应该在其中。在这里,我使用
REPLACE()
删除空格:

SELECT * FROM example
WHERE FIND_IN_SET('12', REPLACE(participants, ' ', ''))

你没有。您可以规范化表,这样问题就可以解决了。将参与者放入子表,一人记录。