我知道这是微不足道的,但由于某种原因,我遇到了麻烦。我有一个包含用户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."%'
");
答案 0 :(得分:0)
以下是修改后的代码:
$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 -meta columns。
而且,主要问题是你错误地使用了Users表。此表与meta表不同,它包含用户电子邮件,用户名和其他内容的实际列,因此您只需从中选择所需内容,因此只有 x.user_email 。< / p>
另外,我不确定WHERE搜索条件,因为ID列通常是数字,所以你最好使用比较,而不是喜欢。如果您的$ search是一个数字且只有一个ID匹配,请将WHERE替换为“ id = $ search ”。