首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从SET字段中删除值的最好方法是什么?

从SET字段中删除值的最好方法是什么?
EN

Stack Overflow用户
提问于 2013-02-01 16:55:46
回答 5查看 13K关注 0票数 19

这是更新mysql集合字段的最佳方法,也是从字段中删除特定值的最佳方式。

例如:字段类别的值:1、2、3、4、5?我想从列表中删除“2”:

代码语言:javascript
复制
UPDATE table 
SET categories = REPLACE(categories, ',2,', ',') 
WHERE field LIKE '%,2,%';

但是如果'2‘是列表中的第一个或最后一个值呢?

代码语言:javascript
复制
UPDATE table 
SET categories = REPLACE(categories, '2,', '') 
WHERE field LIKE '2,%';

UPDATE table 
SET categories = REPLACE(categories, ',2', '') 
WHERE field LIKE ',2%';

我怎么能在一个查询中处理所有3种情况?!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-01 17:26:18

如果需要从集合中删除的值不能多次出现,则可以使用以下命令:

代码语言:javascript
复制
UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM REPLACE(CONCAT(',', categories, ','), ',2,', ','))
WHERE
  FIND_IN_SET('2', categories)

看看它是如何工作的,here。如果该值可以多次出现,则会删除该值的所有实例:

代码语言:javascript
复制
UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM
      REPLACE(
        REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
    )
WHERE
  FIND_IN_SET('2', categories)
票数 32
EN

Stack Overflow用户

发布于 2013-02-01 19:03:55

代码语言:javascript
复制
update TABLE
set COLUMN = COLUMN & ~NUM
where COLUMN & NUM

摘自:http://dev.mysql.com/doc/refman/5.0/en/set.html的评论部分

不过要注意,NUM不是值'2‘,而是它的内部索引。因此,如果您定义了类似"set ('1,'2','3','4','5')“的字段,则这些值的对应索引为(1,2,4,8,16)。

票数 8
EN

Stack Overflow用户

发布于 2016-10-13 17:22:24

这是另一种方法:

代码语言:javascript
复制
UPDATE table
SET categories = CONCAT_WS(',',
    IF(FIND_IN_SET('1', categories), '1', NULL),
    -- Note that '2' is missing here!
    IF(FIND_IN_SET('3', categories), '3', NULL),
    IF(FIND_IN_SET('4', categories), '4', NULL),
    IF(FIND_IN_SET('5', categories), '5', NULL)
);

CONCAT_WS将其所有参数(除参数1外)与第一个参数(在本例中为',')连接在一起,如果它们不是NULL的话。我们查找SET字段的每个可能值(如果该字段包含该值),但跳过要删除的值(在本例中为2)。如果是,则返回该值,否则返回NULL。这将使用','连接集合的所有值,跳过我们想要删除的值,并为SET字段重新构造一个新值。

当然,这只有在您知道categories的所有可能值的情况下才有效,但由于这是一个SET字段,所以您知道这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14642658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档