不确定如何解释这个。我有以下样本表
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个不正确的计数。有关使用什么查询的任何建议?
答案 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;
代替。
注意强>
如果可以的话,最好不要在一个字段中存储分隔的值列表。它要求麻烦和糟糕的性能,因为MySQL不能使用索引来处理这种情况。通过使用索引来理解你的表格,摆脱这个问题并获得性能,这是Marc的合理建议。
答案 1 :(得分:0)
FIND_IN_SET()
用于此类事情,但您也需要剥离空格,因为那些不应该在那里。在这里,我使用REPLACE()
删除空格:
SELECT * FROM example
WHERE FIND_IN_SET('12', REPLACE(participants, ' ', ''))