Mysql删除逗号分隔字符串中的特定单词

时间:2011-03-28 04:14:34

标签: php mysql

我的表格中有'tags'字段:

标签

TAG1,TAG2,TAG3

如何使用mysql查询删除包含逗号的',tag2'。

6 个答案:

答案 0 :(得分:3)

对于SET数据类型,您可以使用类似的内容 -

CREATE TABLE sets(tags SET('tag1','tag2','tag3'));
INSERT INTO sets VALUES
  ('tag1,tag2'),
  ('tag1,tag3,tag2'),
  ('tag2,tag3'),
  ('tag3,tag1');

UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1);

SELECT * FROM sets;
+-----------+
| tags      |
+-----------+
| tag1      |
| tag1,tag3 |
| tag3      |
| tag1,tag3 |
+-----------+

答案 1 :(得分:3)

除了我没有测试的第一个答案,因此我没有意见,其他人在以下情况下会失败:

1- tags = "tag1,tag2,tag22,tag3"
2- tags = "tag2,tag1,tag3"

在第一个例子中,REPLACE(tags,'tag2','')函数将删除第三个逗号分隔值,即tag22,在第二个示例中,tag2将不会被REPLACE(tags,', tag2','')

一种可能的解决方案是:

REPLACE(REPLACE(CONCAT(',', tags, ','), 'tag2', ''), ',,', ',')

我的解决方案的问题在于,您总是会在字符串的开头和结尾处使用带有冗余逗号的值存储。但就我而言,它运作良好。

答案 2 :(得分:3)

我认为此问题的最佳答案在以下链接中 The best way to remove value from SET field?

查询应该是这样的,它涵盖了逗号分隔列

中的值,值或值,或仅包含值
UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM REPLACE(CONCAT(',', col, ','), ',2,', ','))
WHERE
  FIND_IN_SET('2', categories)

在这里你可以在where子句中找到你的条件。有关详细信息,请参阅上面的链接。

答案 3 :(得分:0)

在MySQL中使用replace函数:

replace(FIELD_NAME, ‘find this string’, ‘replacement string’);

所以在你的情况下:

SELECT REPLACE('tag1,tag2,tag3', ',tag2', '');

有关详细信息,请查看:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

答案 4 :(得分:0)

我找到了一个解决方案,但很想知道是否有更简单的方法... SELECT TRIM(BOTH ',' FROM (SELECT REPLACE(REPLACE('tag1,tag2,tag3','tag2',''),',,',',')))

答案 5 :(得分:0)

快速提示:

UPDATE sets SET tags = tags &~ (1 << FIND_IN_SET('tag2', tags) - 1);

当您的设置如下时不起作用:     'TAG1', 'TAG2', 'TAG3'

'tag3'将因此操作而丢失

我最终使用了一个简单的双重替换:

UPDATE sets SET tags = replace(replace(tags, 'tag2', ''), ',,', '')

包装替换会删除剩余的逗号以免替换'tag2',因为您无法确定您的tagg是否是该组的第一个或最后一个项目

关于tag22留下2的情况,就像OP那样没有引导零的情况,无论如何你的麻烦就是