Добавление данных пользователя к существующему user_id

Вопрос или проблема

Я использую phpMyAdmin, чтобы добавить новые записи пользователей к существующим пользователям в базе данных WordPress. База данных предназначена для сети WordPress Multisite.

Мне пришлось перенести мой старый сайт WP на новый сайт, но старая база данных имела структуру единой базы данных WP, а новая мультисайт WP имеет три новые записи для каждого пользователя.

Мой вопрос: как я могу обновить/вставить тысячи существующих записей пользователей с этими тремя новыми записями для WP multisite?

Вот три новые записи для таблицы wp_usermeta:

(225579, 7520, 'locale', ''),
(225583, 7520, 'primary_blog', '3'),
(225584, 7520, 'source_domain', 'example.com'),

Без добавленных этих записей каждый отдельный блог не может видеть своих собственных клиентов. В WP multisite все пользователи и мета-пользователи консолидированы в одну таблицу.

Для начала, мои старые записи клиентов можно найти в таблице wp_usermeta как:

(225571, 7520, 'first_name', 'John'),
(225572, 7520, 'last_name', 'Doe'),

Теперь мне нужно добавить 3 вышеуказанные записи к каждому существующему user_id. Как вы можете видеть в моем примере, user_id одинаковый для всех 5 записей. Имейте в виду, что я использую данные нового пользователя, чтобы подчеркнуть то, что мне нужно. Я должен добавить 3 новые записи к каждому существующему user_id с нуля.

Я пробовал несколько вещей безуспешно:

INSERT INTO wp_usermeta SELECT DISTINCT meta_key FROM wp_usermeta VALUES ('source_domain', 'example.com');
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) VALUES ('primary_blog', '3');
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT DISTINCT umeta_id, user_id, 'source_domain', 'example.com';
INSERT INTO wp_usermeta (meta_key, meta_value) SELECT 'souce_domain', 'example.com';
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT umeta_id, user_id, 'source_domain', 'example.com' WHERE user_id >= '51'
INSERT INTO wp_usermeta (umeta_id, user_id, meta_key, meta_value) SELECT DISTINCT (umeta_id, user_id, 'source_domain', 'example.com') WHERE user_id = user_id
INSERT INTO wp_usermeta VALUES (umeta_id, user_id>='51', meta_key='source_domain', meta_value="example.com") ON DUPLICATE KEY UPDATE user_id;

Имена таблиц и столбцов:

Таблица = wp_usermeta
Столбцы = umeta_id, user_id, meta_key, meta_value

Вот запрос. Попробуйте это, не забудьте заменить user_id на фактический идентификатор пользователя, meta key на ваш meta_key, например “phone_no”, а meta value на ваше meta_value, например “1238899776”.

INSERT INTO `wp_usermeta`(`user_id`, `meta_key`, `meta_value`) 
VALUES (1375,'_lastlogin', '1497621956')`

Ответ или решение

Когда вы переносите старый сайт WordPress в сеть Multisite, важно корректно обновить таблицы базы данных, чтобы пользователи могли получить доступ к своим данным. В вашем случае необходимо добавить новые записи в таблицу wp_usermeta для существующих пользователей, чтобы обеспечить их взаимодействие с новыми сайтом и его функциональностью.

Шаги по добавлению новых данных в таблицу wp_usermeta

  1. Подготовка данных: Вам необходимо создать новые записи для каждого пользователя, используя их идентификатор (user_id). Убедитесь, что идентификатор пользователя, который вы используете, существует в таблице wp_usermeta.

  2. Структура записи: У вас есть три новых метаполе, которые вы хотите добавить для каждого пользователя:

    • locale (пустое значение)
    • primary_blog (идентификатор блога, например ‘3’)
    • source_domain (например ‘example.com’)
  3. SQL-запрос для добавления записей:

    Ниже приведен SQL-запрос, который добавит указанные вами поля для каждого пользователя. Не забудьте заменить <user_id> на актуальный идентификатор пользователя или использовать цикл для перебора всех идентификаторов.

    INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES 
    (7520, 'locale', ''),
    (7520, 'primary_blog', '3'),
    (7520, 'source_domain', 'example.com');

    Если вы хотите обновить метаданные для множества пользователей, вы можете использовать следующий запрос с INSERT ... ON DUPLICATE KEY UPDATE, чтобы избежать дублирования записей:

    INSERT INTO wp_usermeta (user_id, meta_key, meta_value) VALUES 
    (7520, 'locale', ''),
    (7520, 'primary_blog', '3'),
    (7520, 'source_domain', 'example.com')
    ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
  4. Автоматизация для всех пользователей: Если вы хотите добавить эти данные всем пользователям в таблице wp_usermeta, вы можете использовать следующий запрос:

    INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
    SELECT user_id, 'locale', '' FROM wp_usermeta
    GROUP BY user_id
    ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
    
    INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
    SELECT user_id, 'primary_blog', '3' FROM wp_usermeta
    GROUP BY user_id
    ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);
    
    INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
    SELECT user_id, 'source_domain', 'example.com' FROM wp_usermeta
    GROUP BY user_id
    ON DUPLICATE KEY UPDATE meta_value = VALUES(meta_value);

Рекомендации

  • Резервное копирование базы данных: Прежде чем вносить изменения в базу данных, убедитесь, что у вас есть актуальная резервная копия, чтобы избежать потери данных.
  • Тестирование: Запустите изменения на небольшом наборе данных или в тестовом окружении, чтобы убедиться, что всё работает как задумано.
  • Эффективность запросов: Обратите внимание на то, что выполнение больших вставок может занять время. Делайте это в плановых окнах или с минимальной нагрузкой на сервер.

Следуя этим шагам, вы сможете успешно обновить метаполе пользователей в вашей сети WordPress Multisite.

Оцените материал
Добавить комментарий

Капча загружается...