选择定位不正常

时间:2014-08-18 17:07:01

标签: mysql locate

不确定如何解释这个。我有以下样本表

id          participants
13          128, 125
18          122, 125
29          182, 125
34           17, 12
38           18, 15

我想得到12在右边的消息的计数,所以使用以下查询,选择count(id)作为来自表的消息,其中locate(12,参与者,2) 此查询的问题在于它返回所有结果,例如12 125,所以不是有一个计数我有4个不正确的计数。有关使用什么查询的任何建议?

2 个答案:

答案 0 :(得分:0)

您可以在SUBSTRING_INDEX和', '作为分隔符的帮助下获得结果:

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

如果您无法确定逗号后面的空格,可以使用

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

代替。

Demo

注意
如果可以的话,最好不要在一个字段中存储分隔的值列表。它要求麻烦和糟糕的性能,因为MySQL不能使用索引来处理这种情况。通过使用索引来理解你的表格,摆脱这个问题并获得性能,这是Marc的合理建议。

答案 1 :(得分:0)

FIND_IN_SET()用于此类事情,但您也需要剥离空格,因为那些不应该在那里。在这里,我使用REPLACE()删除空格:

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