Mysql
 sql >> база данни >  >> RDS >> Mysql

актуализиране на ред без изтриване на предишни стойности в mysql

Не можете ли просто да го свържете, вместо да се опитвате първо да го разделите?

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

Но това предполага лошо нормализиран дизайн на базата данни. Като цяло списък, разделен със запетая, вместо това трябва да се съхранява като редове в друга таблица (т.е. по един ред на стойност в списъка), както е предложено от Mark Baker.

РЕДАКТИРАНЕ – Ако искате да имате само едно копие на всеки идентификатор във всяко поле user_ids, независимо колко пъти се опитвате да го вмъкнете и искате да можете да добавяте няколко идентификатора наведнъж:-

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

РЕДАКТИРАНЕ отново - ако имате таблица с потребители, съдържаща идентификаторите, тогава можете да изберете идентификаторите от този, където идентификаторът е един от тези, които искате да добавите.

Нещо подобно.

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. Как да съхранявате няколко опции в една таблица?

  2. MYSQL - вземете ред за всяка година, с обща сума за всеки месец

  3. Как да получите достъп до mysqli връзка в друг клас на друга страница?

  4. Грешен изход на MySQL с IN клауза и параметър

  5. Намерете празнини в датата с mysql