0

不知道如何解释这一点。我有以下示例表

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,参与者, 2) 这个查询的问题是它返回所有结果为 12,例如 125,所以我有 4 个计数,而不是一个计数,这是不正确的。关于使用什么查询的任何建议?

4

2 回答 2

0

FIND_IN_SET()用于这种事情,但你也需要去掉空格,因为那些不应该在那里。在这里,我曾经REPLACE()删除空格:

SELECT * FROM example
WHERE FIND_IN_SET('12', REPLACE(participants, ' ', ''))
于 2014-08-18T18:21:52.040 回答
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 的合理建议是规范化您的表,摆脱这个问题并通过使用索引来获得性能。

于 2014-08-18T17:52:36.503 回答