我知道这是微不足道的,但由于某种原因我遇到了麻烦。我有一个包含用户 ID 的表,我试图连接 wp_users 表和 wp_usermeta 表来获取第一个、最后一个和电子邮件地址。
我可以将 wp_usermeta 表与第一个表连接起来,毫无问题地获取名字和姓氏。我遇到的问题是加入 wp_users 表以获取电子邮件地址。
$query = $wpdb->get_results
("
SELECT id, u_id, u.meta_value as first_name, u2.meta_value as last_name, x.ID as user_email
FROM $table_name s
INNER JOIN wp_usermeta u ON s.u_id = u.user_id
INNER JOIN wp_usermeta u2 ON s.u_id = u2.user_id
INNER JOIN wp_users x ON s.u_id = x.ID
WHERE
u.meta_key = 'first_name' AND u2.meta_key = 'last_name' AND x.ID = 'user_email' AND
id like '%".$search."%'
");
最佳答案
修改后的代码如下:
$query = $wpdb->get_results (" SELECT id, u_id, u.meta_value as first_name, u2.meta_value as last_name, x.user_email FROM $table_name s INNER JOIN wp_users x ON s.u_id = x.ID INNER JOIN wp_usermeta u ON s.u_id = u.user_id AND u.meta_key = 'first_name' INNER JOIN wp_usermeta u2 ON s.u_id = u2.user_id AND u2.meta_key = 'last_name' WHERE id like '%".$search."%' ");
我已更改 usermeta 连接以包含这两个条件(用户 ID 和元键值)。但是,如果用户没有设置名字或姓氏,此查询将不会返回该用户,因此您可以考虑将用户的 INNER JOIN 更改为 LEFT JOIN -元列。
而且,主要问题是您错误地使用了 Users 表。该表与元表不同,它具有用户电子邮件、用户名和其他内容的实际列,因此您只需从中选择您需要的内容,因此您只有x.user_email。
另外,我不确定 WHERE 搜索条件,因为 ID 列通常是数字,所以你最好使用比较,而不是 like。如果您的 $search 是一个数字,并且只有一个 ID 匹配,请将 WHERE 替换为“id = $search”。
关于mysql - WordPress:加入用户、元和外部表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909029/