【发布时间】:2019-06-04 22:08:28
【问题描述】:
我参加了一个项目,遇到了别人设计的不好,我们有一个表叫task,每个task有很多用户,task表如下:
+----------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| id | varchar(40) | NO | PRI | NULL | |
| name | varchar(100) | YES | | NULL | |
| task_users | varchar(1000) | YES | | NULL | |
并且用户像aaa,bbb,ccc一样存储在task_users列中,这意味着将许多用户ID放在一个列中,我知道这是一个非常糟糕的设计,但由于它是一个旧项目,我无法修改表格设计.
现在我有一个问题,如果用户被删除了,如何将其从task_users 列中删除?
用户id是由UUID生成的,长度固定,32个字符,所以每个用户id都是唯一的,比如40cf5f01eb2f4d2c954412f27b3bf6eb,但问题是用户id可能出现在task_users的任意位置列,所以我不知道如何删除它
aaa,40cf5f01eb2f4d2c954412f27b3bf6eb,bbb -- in center
40cf5f01eb2f4d2c954412f27b3bf6eb,aaa,bbb -- in head
aaa,bbb,40cf5f01eb2f4d2c954412f27b3bf6eb -- in end
当删除用户id时,更新后的结果是这样的
aaa,bbb
我想知道我们可以使用一个更新sql来删除指定的用户id并且仍然保持相同的数据格式吗?
注意:我是在MySQL存储过程中做的,附加变量可能会有帮助,但我还是想只用一个sql来做,MySQL版本是5.0
提前致谢!
【问题讨论】:
-
您可以使用
REGEXP_REPLACE()函数将指定的用户标识符替换为空字符串。 -
@Alexander 你能举个例子吗?我考虑过使用正则表达式,但关键是如何保持相同的格式,不仅仅是简单地用空替换它,因为这会添加重复的
, -
对不起,该功能从 MySQL 8.0 开始可以使用
-
@Alexander 没关系,我对这种糟糕的桌子设计感到非常痛苦