Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

atualizar linha sem excluir valores anteriores no mysql


Você não pode simplesmente concatená-lo, em vez de tentar dividi-lo primeiro?
UPDATE users_group 
SET user_ids = CONCAT_WS(',', user_ids, '5' ) 
WHERE group_id =1

Mas isso sugere um design de banco de dados mal normalizado. Geralmente, uma lista separada por vírgulas deve ser armazenada como linhas em outra tabela (ou seja, uma linha por valor na lista), conforme sugerido por Mark Baker.

EDIT - Se você deseja ter apenas uma única cópia de qualquer id em cada campo user_ids, independentemente de quantas vezes você tente inseri-lo, e deseja adicionar vários ids de uma só 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

EDITE novamente - se você tiver uma tabela de usuários contendo os ids, poderá selecionar os ids de onde o id é um daqueles que você deseja adicionar.

Algo assim.
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