Mysql
 sql >> Base de données >  >> RDS >> Mysql

mettre à jour la ligne sans supprimer les valeurs précédentes dans mysql

Ne pouvez-vous pas simplement le concaténer plutôt que d'essayer de le diviser en premier ?

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

Mais cela suggère une conception de base de données mal normalisée. Généralement, une liste séparée par des virgules doit plutôt être stockée sous forme de lignes sur une autre table (c'est-à-dire une ligne par valeur dans la liste) comme suggéré par Mark Baker.

MODIFIER - Si vous souhaitez n'avoir qu'une seule copie d'un identifiant dans chaque champ user_ids, quel que soit le nombre de tentatives d'insertion, et que vous souhaitez pouvoir ajouter plusieurs identifiants à la fois :-

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

MODIFIER à nouveau - si vous avez un tableau d'utilisateurs contenant les identifiants, vous pouvez sélectionner les identifiants à partir de celui où l'identifiant est l'un de ceux que vous souhaitez ajouter.

Quelque chose comme ça.

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