Sql 正在尝试从WordPress数据库获取用户id和用户元数据

Sql 正在尝试从WordPress数据库获取用户id和用户元数据,sql,wordpress,inner-join,Sql,Wordpress,Inner Join,我试图在WordPress中获取所有用户的列表,从user表中获取用户ID,并从usermeta表中获取相应用户的一些附加元信息。我正在尝试下面的代码,但它不工作。我想我在语句的内部连接部分出错了,但我不知道如何纠正它 $sql = " SELECT {$wpdb->users}.ID,{$wpdb->usermeta}.meta_value FROM {$wpdb->users},{$wpdb->usermeta} INNER JOIN {$wpdb->user

我试图在WordPress中获取所有用户的列表,从user表中获取用户ID,并从usermeta表中获取相应用户的一些附加元信息。我正在尝试下面的代码,但它不工作。我想我在语句的内部连接部分出错了,但我不知道如何纠正它

$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、 我意识到在WordPress中使用函数可以更容易地获取这些信息,但因为这是一个特定的操作,所以我不能使用这种方法。

你很接近了。实际上,您无意中加入了两次用户元数据。一次作为
的隐式交叉联接,另一次作为显式内部联接。相反:

$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);

要在同一条记录中(并且,我假设,$wpdb输出的同一个数组中)获得名字、姓氏以及dev功能,您可以对该元表进行三次内部联接。将它们中的每一个粘贴到子查询中,可以很容易地解析正在发生的事情:

$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);

你很接近。实际上,您无意中加入了两次用户元数据。一次作为
的隐式交叉联接,另一次作为显式内部联接。相反:

$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);

要在同一条记录中(并且,我假设,$wpdb输出的同一个数组中)获得名字、姓氏以及dev功能,您可以对该元表进行三次内部联接。将它们中的每一个粘贴到子查询中,可以很容易地解析正在发生的事情:

$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);

谢谢你。当我打印出来时,每个元值都在一个单独的数组中,所以它就像:stdClass::u set_state(数组('ID'=>'2','meta_value'=>'Martin',),stdClass::u set_state(数组('ID'=>'2','meta_value'=>'Gibson',),有可能把它放到一个数组中吗?或者我遗漏了什么?我不熟悉这一部分,因为数组输出是特定于
$wpdb->get_results
函数的。这是一个特定于wordpress的函数,用于检索和转换发送给它的SQL结果集。由于如何从数据库中获取数据的问题在这个问题中得到了解决,因此谨慎的做法是使用
wordpress
标签提出一个新问题,询问是否可以从
$wpdb
中获取单个数组。感谢JNEVIL,我应该能够重新构建它,使其格式正确。我只是不确定查询的结构是否导致了输出的特定方式。谢谢,啊!!好啊这是有道理的。查询本身只会为它找到的每个
user.id/meta\u值
输出一条简单记录。例如:
2 |“马丁”
2 |“吉布森”
。如果希望first和lastname在同一条记录中,那么(奇怪的是)需要两次连接元表,两次都使用内部连接。我认为子查询是正确的方式。如果有帮助的话,我会把答案贴出来。太棒了,非常感谢你的帮助,非常感谢。当我打印出来时,每个元值都在一个单独的数组中,所以它就像:stdClass::u set_state(数组('ID'=>'2','meta_value'=>'Martin',),stdClass::u set_state(数组('ID'=>'2','meta_value'=>'Gibson',),有可能把它放到一个数组中吗?或者我遗漏了什么?我不熟悉这一部分,因为数组输出是特定于
$wpdb->get_results
函数的。这是一个特定于wordpress的函数,用于检索和转换发送给它的SQL结果集。由于如何从数据库中获取数据的问题在这个问题中得到了解决,因此谨慎的做法是使用
wordpress
标签提出一个新问题,询问是否可以从
$wpdb
中获取单个数组。感谢JNEVIL,我应该能够重新构建它,使其格式正确。我只是不确定查询的结构是否导致了输出的特定方式。谢谢,啊!!好啊这是有道理的。查询本身只会为它找到的每个
user.id/meta\u值
输出一条简单记录。例如:
2 |“马丁”
2 |“吉布森”
。如果希望first和lastname在同一条记录中,那么(奇怪的是)需要两次连接元表,两次都使用内部连接。我认为子查询是正确的方式。如果有帮助的话,我会把答案贴出来。太棒了,非常感谢你的帮助,非常感谢