sql >> Base de Datos >  >> RDS >> Mysql

actualizar fila sin eliminar valores anteriores en mysql

¿No puedes simplemente concatenarlo, en lugar de tratar de dividirlo primero?

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

Pero esto sugiere un diseño de base de datos mal normalizado. Por lo general, una lista separada por comas debe almacenarse como filas en otra tabla (es decir, una fila por valor en la lista) como sugiere Mark Baker.

EDITAR:si solo desea tener una copia única de cualquier identificación en cada campo de identificación de usuario, independientemente de cuántas veces intente insertarlo, y desea poder agregar varias identificaciones a la vez:-

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

EDITAR nuevamente:si tiene una tabla de usuarios que contiene las identificaciones, puede seleccionar las identificaciones desde donde la identificación es una de las que desea agregar.

Algo como esto.

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