Mysql
 sql >> Baza danych >  >> RDS >> Mysql

zaktualizuj wiersz bez usuwania poprzednich wartości w mysql

Czy nie możesz po prostu połączyć tego, zamiast próbować go najpierw podzielić?

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

Ale to sugeruje źle znormalizowany projekt bazy danych. Ogólnie rzecz biorąc, lista oddzielona przecinkami powinna być zamiast tego przechowywana jako wiersze w innej tabeli (tj. jeden wiersz na wartość na liście), zgodnie z sugestią Marka Bakera.

EDYCJA - Jeśli chcesz mieć tylko jedną kopię dowolnego identyfikatora w każdym polu user_ids, niezależnie od tego, ile razy próbujesz go wstawić, i chcesz mieć możliwość dodania wielu identyfikatorów naraz:-

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

EDYTUJ ponownie - jeśli masz tabelę użytkowników zawierającą identyfikatory, możesz wybrać identyfikatory z tego, w którym identyfikator jest jednym z tych, które chcesz dodać.

Coś takiego.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie MySQL o wspólnych znajomych

  2. Dlaczego to zapytanie nie działa w SQLite, ale działa dobrze w MySQL i MSAccess?

  3. Jak wstawić dane do kolumn z PHP do MariaDB?

  4. Jak zmienić datę mysql na Ago w php

  5. Nie można połączyć się z mysql w 127.0.0.1:3306 z odmową dostępu użytkownika root dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK)