我试图获取WordPress中所有用户的列表,从用户表中获取用户ID,并从usermeta表中获取相应用户的一些其他元信息。我正在尝试以下代码,但它无法正常工作。我认为我在声明的INNER JOIN部分出错,但我不知道如何纠正它。
$sql = "
SELECT {$wpdb->users}.ID,{$wpdb->usermeta}.meta_value
FROM {$wpdb->users},{$wpdb->usermeta}
INNER JOIN {$wpdb->usermeta} ON ({$wpdb->users}.ID = {$wpdb->usermeta}.user_id)
WHERE 1=1 AND {$wpdb->usermeta}.meta_key = 'first_name' OR {$wpdb->usermeta}.meta_key = 'last_name' OR {$wpdb->usermeta}.meta_key = 'dev_capabilities'
";
$users = $wpdb->get_results($sql);
P.S。我意识到使用get_users()函数在WordPress中获取此信息的方法比较简单,但由于这是特定的操作,我无法使用此方法。
答案 0 :(得分:1)
你很亲密。实际上,您实际上是两次加入usermeta数据。作为与,
的隐式交叉连接,再次作为显式的INNER JOIN。代替:
$sql = "
SELECT {$wpdb->users}.ID,{$wpdb->usermeta}.meta_value
FROM {$wpdb->users} INNER JOIN {$wpdb->usermeta} ON ({$wpdb->users}.ID = {$wpdb->usermeta}.user_id)
WHERE 1=1 AND {$wpdb->usermeta}.meta_key = 'first_name' OR {$wpdb->usermeta}.meta_key = 'last_name' OR {$wpdb->usermeta}.meta_key = 'dev_capabilities'
";
$users = $wpdb->get_results($sql);
要获取同一记录中的名字和姓氏以及dev功能(并且,我假设,在$ wpdb输出的同一个数组中),您可以三次内连接到该元表。将每一个都粘贴到子查询中可以很容易地解析发生的事情:
$sql = "
SELECT {$wpdb->users}.ID, firstname.meta_value as first_name, lastname.meta_value as last_name, devcapabilities.meta_value as dev_capabilities
FROM {$wpdb->users}
INNER JOIN (SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'first_name') as firstname ON {$wpdb->users}.ID = firstname.user_id
INNER JOIN (SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'last_name') as lastname ON {$wpdb->users}.ID = lastname.user_id
INNER JOIN (SELECT user_id, meta_value FROM {$wpdb->usermeta} WHERE meta_key = 'dev_capabilities') as devcapabilities ON {$wpdb->users}.ID = devcapabilities.user_id
";
$users = $wpdb->get_results($sql);