Перемещение определенного списка пользователей с помощью SQL-запроса

0

У меня есть старая база данных и новая база данных. В старой базе данных были разные группы пользователей с пользователями внутри каждой группы пользователей. В новой базе данных есть те же самые группы, но случайно, все пользователи были помещены только в одну группу.

У меня есть старый список имен пользователей (или ID пользователя), и я хочу переместить их в соответствующую группу.

Как я могу сделать это с помощью SQL-запроса?

Например:

100 пользователей в новой базе данных в настоящее время находятся в группе пользователей "1", которую я хочу переместить в группу "2". В группе 1 уже есть 2000 пользователей, поэтому я не могу просто переместить всех пользователей в группу 2. Но у меня есть список из 100 идентификаторов пользователей (и имен пользователей), чтобы их выбрать.

Соответствующие имена столбцов: "userid" "usergroupid" "имя пользователя"

и все они находятся в таблице "пользователь".

Спасибо!

Примечание. Старая база данных не подключена к новой базе данных. У меня есть список старых идентификаторов пользователя/имен пользователей в формате с разделителями-запятыми.

  • 1
    Несколько вопросов: 1) Все ли пользователи имеют одинаковые значения UserId между старой и новой базами данных? 2) Имеют ли группы пользователей одинаковые значения usergroupid между старой и новой базой данных? 3) Когда вы ссылаетесь на «Usergroup 2», означает ли это группу с UserGroupId = 2?
  • 0
    Да, на все эти вопросы.
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Что-то вроде

update user set usergroupid=2 
where userid in (select userid from old_user where usergroupid=2)

Или выберите по именам, что имеет смысл. Должна дать вам эту идею.

В ответ на комментарий, если у вас есть список идентификаторов в форме csv, например "0,5,9,25,35" и т.д., А не таблица, тогда запрос будет выглядеть следующим образом:

update user set usergroupid=2 
where userid in (0,5,9,25,35)
  • 0
    Извините за путаницу. Где именно я бы ввел список идентификаторов пользователей в приведенном выше запросе? К вашему сведению, старая база данных не связана с новой базой данных, поэтому все, что у меня есть, это список разделенных запятыми идентификаторов старых пользователей (которые совпадают в новой базе данных). Я обновил свой вопрос, чтобы отразить этот момент. Спасибо!
  • 0
    Ваш пост сказал, что у вас есть список пользователей - я предполагаю, что в таблице? Если это жестко закодированный список, то вы можете ввести его как «где идентификатор пользователя (id1, id2, id3 ...)», если список не слишком длинный.
Показать ещё 3 комментария
0

Поскольку ваши старые пользователи указаны в текстовом файле CSV, вам нужно будет импортировать этот CSV в свою новую базу данных. Есть несколько способов сделать это, но одним из способов было бы сделать это, как предложено в следующем ответе "Переполнение стека". Импортируйте этих старых пользователей в таблицу с именем OldSystemUser. Следуйте инструкциям здесь: Загрузите CSV в MySQL

Переместите тех пользователей, которые находятся в группе пользователей 2 в таблице OldSystemUser, в группу 2 в новой базе данных. Сделайте это, используя подзапрос в WHERE вашего оператора UPDATE:

UPDATE [user]
  SET [UserGroupId] = 2
  WHERE [UserId] IN (
    -- select all userIds that are in UserGroup 2 in the old database
    SELECT [UserId]
      FROM [OldSystemUser]
      WHERE [UserGroupId] = 2
  )

После того, как вы это завершили, не забудьте удалить старую таблицу, если она больше не нужна:

DROP TABLE [OldSystemUser]
  • 0
    Спасибо за ответ! Я прошу прощения за путаницу. Старая база данных не подключена к новому серверу. Все, что у меня есть, это CSV старых пользователей с разделителями-запятыми.
  • 0
    Пожалуйста, обновите ваш вопрос этими новыми данными, чтобы сделать их более полезными для тех, кто пытается решить вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню