Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zeile aktualisieren, ohne vorherige Werte in mysql zu löschen

Können Sie es nicht einfach verketten, anstatt zu versuchen, es zuerst aufzuteilen?

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

Dies deutet jedoch auf ein schlecht normalisiertes Datenbankdesign hin. Im Allgemeinen sollte eine durch Kommas getrennte Liste stattdessen als Zeilen in einer anderen Tabelle gespeichert werden (dh eine Zeile pro Wert in der Liste), wie von Mark Baker vorgeschlagen.

BEARBEITEN - Wenn Sie nur eine einzige Kopie einer ID in jedem Feld "user_ids" haben möchten, unabhängig davon, wie oft Sie versuchen, sie einzufügen, und Sie mehrere IDs gleichzeitig hinzufügen möchten:-

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

BEARBEITEN Sie erneut - wenn Sie eine Tabelle mit Benutzern haben, die die IDs enthält, können Sie die IDs aus der auswählen, in der die ID eine derjenigen ist, die Sie hinzufügen möchten.

Etwas in der Art.

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