更新行而不删除mysql中的先前值

时间:2015-09-16 10:16:02

标签: php mysql

我的一个表有一个字段user_ids,字段的值如2,3

group_id| user_ids  
--------|------------   
1       | 2,3  
--------|------------  
2       | 5,8

我想更新字段而不删除当前值。对于前者如果我需要为group_id id 1添加5,那么2,3应该像2,3,5

我正在使用此查询:

UPDATE users_group SET user_ids = CONCAT( SUBSTRING( user_ids, 1, CHAR_LENGTH( user_ids ) -1 ) , ',5' ) WHERE group_id =1

但是用逗号删除以前的值。

group_id| user_ids  
--------|------------   
1       | ,5  
--------|------------  
2       | 5,8

任何人都可以建议正确的方法吗?

4 个答案:

答案 0 :(得分:3)

你能不能把它连接起来,而不是先把它拆开来?

UPDATE users_group 
SET user_ids = CONCAT_WS(',', user_ids, '5' ) 
WHERE group_id =1

但这确实表明数据库设计规范化程度很低。通常,逗号分隔列表应该被存储为另一个表上的行(即列表中每个值一行),如Mark Ba​​ker所建议。

编辑 - 如果您希望每个user_ids字段中只有一个id的副本,无论您尝试插入多少次,并且您希望能够一次添加多个ID: -

UPDATE users_group a
INNER JOIN
(
    SELECT 3 AS an_id
    UNION 
    SELECT 4
) b
ON FIND_IN_SET(b.an_id, a.user_ids) = 0
SET a.user_ids = CONCAT_WS(',', a.user_ids, b.an_id ) 
WHERE a.group_id =1

再次编辑 - 如果您有一个包含ID的用户表,那么您可以从ID中选择ID是您要添加的ID之一。

像这样。

UPDATE users_group a
INNER JOIN
(
    SELECT id
    FROM users
    WHERE id IN (3, 4)
) b
ON FIND_IN_SET(b.id, a.user_ids) = 0
SET a.user_ids = CONCAT_WS(',', a.user_ids, b.id ) 
WHERE a.group_id =1

答案 1 :(得分:2)

update table1 set name = concat(name, ', ', 5) WHERE group_id =1

答案 2 :(得分:2)

请尝试此查询。它可能对你有用。

UPDATE users_group SET user_ids = CONCAT( user_ids , ',5' ) WHERE group_id =1

答案 3 :(得分:0)

尝试以下查询:

UPDATE users_group 
SET user_ids = CONCAT( user_ids , ',5' ) 
WHERE group_id =1