Wordpress и MySQL: проблема с триггером - PullRequest
0 голосов
/ 13 декабря 2018

Извините, если я не в том месте, чтобы публиковать сообщения, я новичок и француз (извините за измененный гугл-переводчик), обычно мне все же удается, но там я ломаю зубы по этой проблеме.работает над WordPress, MySQL и с плагином управления участниками под названием WP-member.Я изменил плагин, чтобы пользователь мог вводить свой почтовый индекс.

Проблема в том, что с WordPress вся информация о пользователях хранится в таблице usermeta.

Здесьструктура таблицы: umeta_id (pk): это не идентификатор пользователя, а идентификатор регистрации, т. е. это может быть имя пользователя, его почтовый индекс и т. д. Несколько umeta_id могут быть связаны сid пользователя.

user_id (fk): это идентификатор пользователя, это pk в другой таблице, но другая таблица не может хранить данные, которые я хочу, потому что таблица не может быть изменена в соответствии сWordPress.

meta_key: заголовок данных, например имя, почтовый индекс.Таким образом, мы можем несколько раз найти один и тот же meta_key для разных пользователей.

meta_value: ответ на meta_key, вот где он находит сохраненные данные.

пример упрощенного пользователя:

umeta_id | user_id | meta_key   | meta_value
-----------------------------------------------------------------
1        |   1     | name        | Toto

2        |   1     | postcode    | 66000

...      |   1     | ...         | ...

15       |   1     | city        | Perpignan

Проблема с этой структурой состоит в том, что, по-моему, чем больше пользователей будет накапливать, тем больше будет длинных запросов на получение почтовых индексов.

Поскольку для пользователя может быть 15 различных записей.Если будет 10000 пользователей, будет 150000 строк, чтобы получить нужные нам почтовые индексы.Я хотел бы получить ваше мнение, потому что я думаю, что структура этой таблицы является проблематичной.

Поэтому я хочу создать новую таблицу пользователей со структурой, которая выглядит следующим образом (мне не нужен город), чтобы облегчитьзапросов и, вероятно, их время отклика.

user_id | name  | postcode
-----------------------------------
   1    | toto  | 66000

За создание таблицы не стоит беспокоиться, что касается ее реализации через триггер из таблицы usermeta Я могу получить только user_id и имя благодарявызов new.user_id, но я не могу получить почтовый индекс.Триггер ниже:

insert into users (user_id, name, codepostal) values ​​(
   (select distinct user_id from usermeta where user_id = new.user_id),
   (select meta_value from te_usermeta where meta_key = 'name' and user_id = new.user_id),
   (select meta_value from te_usermeta where meta_key = 'codepostal' and user_id = new.user_id)
 )

Я говорю себе, что обновление будет хуже.Кто-нибудь может направить меня?Заранее благодарю.

1 Ответ

0 голосов
/ 17 декабря 2018

я не знаю, но на другом сайте мне дают этот триггер:

CREATE TRIGGER `ajouter`
BEFORE insert ON `tabone`
FOR EACH ROW
BEGIN
  DECLARE _name         VARCHAR(255)  DEFAULT NULL;
  DECLARE _postcode  INTEGER       DEFAULT NULL;

  SET _name        = (select name        from `tabtwo` where user_id = new.user_id);
  SET _postcode = (select postcode from `tabtwo` where user_id = new.user_id);

  IF new.meta_key = 'name'        then replace into `tabtwo` (`user_id`,`name`,`postcode`) values (new.user_id, new.meta_value,_postcode); END IF;
  IF new.meta_key = 'postcode' then replace into `tabtwo` (`user_id`,`name`,`postcode`) values (new.user_id,_name,new.meta_value);         END IF;

, и он работает.

Как будет медленнее выполнять запрос к новой таблице, оптимизированной по индексамчем запрос к таблице неструктурированной модели EAV WordPress?

...