WordPress和mysql:触发器问题

时间:2018-12-13 16:41:06

标签: mysql wordpress insert sql-update database-trigger

对不起,如果我在错误的位置发帖,我是新来的且是法国人(抱歉,我修改过的google翻译),通常我还是会设法解决,但在这个问题上我还是不敢相信。

我正在使用WordPress,MySQL和一个名为WP-member的成员管理插件。我修改了插件,使用户可以输入邮政编码。

问题在于,使用WordPress时,所有与用户有关的信息都存储在usermeta表中。

这是表的结构: umeta_id(pk):不是用户的ID,而是注册的ID,即它可以是用户的名称,他的邮政编码等。多个umeta_id可以与ID关联用户。

user_id(fk):是用户的ID,它在另一个表中是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 :(得分:0)

我不知道,但是在另一个网站上,他们给了我这个触发条件:

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;

它有效。

用索引优化的新表上的查询如何比非结构化wordpress EAV模型的表上的查询慢?