sql >> Databasteknik >  >> RDS >> Mysql

uppdatera rad utan att ta bort tidigare värden i mysql

Kan du inte bara sammanfoga det i stället för att försöka dela upp det först?

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

Men detta tyder på en dåligt normaliserad databasdesign. Generellt bör en kommaseparerad lista istället lagras som rader i en annan tabell (dvs. en rad per värde i listan) som föreslagits av Mark Baker.

EDIT - Om du bara vill ha en enda kopia av ett id i varje user_ids-fält, oavsett hur många gånger du försöker infoga det, och du vill kunna lägga till flera id samtidigt:-

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

REDIGERA igen - om du har en tabell över användare som innehåller ID kan du välja ID från det där ID:t är ett av dem du vill lägga till.

Något sånt här.

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. Lagring av binär sträng i MySQL

  2. Hantera SQL-databaser med PyQt:Grunderna

  3. PHP singleton databas anslutningsmönster

  4. Inget paket msyql-server tillgängligt