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