从mysql数据库的列表中删除项

envsm3lx  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(305)

这个问题在这里已经有答案了

在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
两年前关门了。
我有一个mysql数据库,其中有一个名为 customers . 在这个表中有一个名为 preferences ,其中的内容是单个或复合名称的列表。
餐桌顾客:

id   name   preferences
---------------------------------
1    John   pears,tomato sauce,bread
2    Rose   carrot cake, salad

我可以很容易地在“首选项”字段中添加一个新条目,例如:

UPDATE `customers` 
  SET preferences = CONCAT(preferences,',oranges') 
WHERE id=2

但是现在,我想知道是否有一种简单的方法来删除列表中的已知项,这并不意味着,读回注册表项,使用php处理它并再次保存它。
我试着用 REGEX_REPLACE 没有成功,因为这个词可以在开头,中间或结尾。因此,我没有成功地编写一个合适的表达式来替换结果。不管怎样,正则表达式可能不是正确的方法。
谢谢

n3schb8v

n3schb8v1#

试试这个:

Update `customers`
    set preferences = TRIM(BOTH ',' FROM TRIM(BOTH 'oranges' FROM TRIM(REPLACE(CONCAT(" "',oranges'" "),' ,oranges ',''))));

它将删除“oranges”。如果前后没有空格 ,oranges 它不会删除它。正如你所看到的,它不是一个 Regex 不再。也 TRIM(BOTH 'oranges' 将从字符串的第一个和最后一个位置删除“oranges”。
演示

相关问题