一尘不染

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

mysql

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

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

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

但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办?

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

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

我如何用一个查询处理所有3种情况?


阅读 192

收藏
2020-05-17

共1个答案

一尘不染

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

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM REPLACE(CONCAT(',', categories, ','), ',2,', ','))
WHERE
  FIND_IN_SET('2', categories)

看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值:

UPDATE yourtable
SET
  categories =
    TRIM(BOTH ',' FROM
      REPLACE(
        REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
    )
WHERE
  FIND_IN_SET('2', categories)
2020-05-17