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

opdatere række uden at slette tidligere værdier i mysql

Kan du ikke bare samle det sammen i stedet for at prøve at dele det op først?

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

Men dette tyder på et dårligt normaliseret databasedesign. Generelt bør en kommasepareret liste i stedet gemmes som rækker på en anden tabel (dvs. én række pr. værdi på listen) som foreslået af Mark Baker.

EDIT - Hvis du kun vil have en enkelt kopi af et id i hvert user_ids-felt, uanset hvor mange gange du prøver at indsætte det, og du vil være i stand til at tilføje flere id'er på én gang:-

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

EDIT igen - hvis du har en tabel med brugere, der indeholder id'erne, kan du vælge id'erne fra det, hvor id'et er et af dem, du vil tilføje.

Sådan noget.

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. Hvor man sikkert opbevarer databaselegitimationsoplysninger på et PHP-websted

  2. kontrollere tilgængeligheden af ​​et værelse med SQL

  3. Kan ikke kompilere GI 12.1.0.2 og segmenteringsfejl

  4. Databasedesignkoncepter med SQL Server Management Studio (SSMS) del 1