Mysql
 sql >> Database >  >> RDS >> Mysql

aggiorna la riga senza eliminare i valori precedenti in mysql

Non puoi semplicemente concatenarlo, invece di provare a dividerlo prima?

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

Ma questo suggerisce una progettazione del database mal normalizzata. Generalmente un elenco separato da virgole dovrebbe invece essere archiviato come righe su un'altra tabella (ad esempio, una riga per valore nell'elenco) come suggerito da Mark Baker.

EDIT - Se vuoi avere una sola copia di qualsiasi ID in ogni campo user_ids, indipendentemente da quante volte tenti di inserirlo, e vuoi essere in grado di aggiungere più ID contemporaneamente:-

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

MODIFICA di nuovo:se hai una tabella di utenti contenente gli ID, puoi selezionare gli ID da quello in cui l'ID è uno di quelli che desideri aggiungere.

Qualcosa del genere.

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