从MySQL数据库中的列表中删除项目

时间:2018-06-11 13:26:05

标签: php mysql sql regex

我有一个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失败,因为这个词可以在开头,中间或结尾。所以我没有成功地写出一个适当的表达来代替结果。无论如何正则表达式,可能不是正确的方法。

由于

1 个答案:

答案 0 :(得分:1)

试试这个:

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

它将删除',oranges'。如果,oranges之前和之后没有空格,则不会删除它。如你所见,它不再是Regex。另外TRIM(BOTH 'oranges'将从字符串的第一个和最后一个位置删除“oranges”。

DEMO