用例背景:我正在使用WordPress网站管理成员资格,并且我PC上的ID卡软件将连接到表格以生成其信息。它只能连接到 一张桌子。
目标:我需要一个名为“ id_card”的表,其中包含各列(member_number,first_name,last_name,exp_date),并且填充了上个月内已被修改的用户(“成员资格”表中有一个标题为“ moddate”的列,我可以将其用作条件)。
挑战1 :我需要从表“ membership”中提取exp_date,其他值(member_number,first_name,last_name)都来自名为“ wp_usermeta”的表(默认表WordPress)。两个源表都包含user_id,以将信息关联到同一用户帐户。我相信这需要某种LEFT JOIN
,但我无法使其正常工作。
挑战2 :更大的挑战:wp_usermeta表包含ROWS中的所有不同用户属性,而不是COLUMNS。因此,这些列的标题为“ user_id,meta_key,meta_value”,单个用户可能会有30行。如果我想选择用户49的名字,它看起来像这样:
SELECT meta_value FROM wp_usermeta WHERE user_id=49 AND meta_key='first_name'
问题:如何编写此查询,以便INSERT INTO
表“ id_card”两个表中的值,使用user_id使其全部保持对齐,尤其是当我不能单独使用user_id作为唯一标识符(即,我知道将其缩小到某个人的名字的唯一方法是同时使用他们的user_id和meta_key两者)在wp_usermeta表中?
答案 0 :(得分:1)
您要复制数据存在主要问题。如果用户更改其数据,则您的副本将过期。如果您查看wp_users表,则有一个ID字段。这指向wp_usermeta表(user_id)
中的相关条目SELECT `wp_users`.*
, `wp_usermeta`.*
FROM `wp_users`
INNER JOIN `wp_usermeta` ON (`wp_users`.`ID` = `wp_usermeta`.`user_id`)
WHERE ID=1;
现在,这将返回多行。如果您只需要一条记录,则需要
SELECT`wp_users`.*
, (SELECT meta_key FROM wp_usermeta WHERE meta_key='wp_user_level' AND user_id=1) AS user_level
, (SELECT meta_key FROM wp_usermeta WHERE meta_key='show_syntax_highlighting' AND user_id=1) AS syntax_highlighting
FROM `wp_users`
WHERE ID=1;
只需重复子查询语句以获取您想要返回的尽可能多的信息。子查询只能返回一个值。