我有一个查询,用于从Wordpress表返回用户详细信息。如果我只是选择我想要的列名,那就好了,但在Wordpress中有一个usermeta表,它有两列,一列称为metakey,一列称为MetaValue。
我想从元键(如first\\u name和last\\u name)中获取某些用户信息,但它们都在同一列-metavalue中。
以下是我所拥有的:
$allquery="SELECT $comma_separated, wp_usermeta.meta_value, wp_usermeta.meta_key,
//comma_seperated are a list of values to search for seperate by ",". this is name, email
GROUP_CONCAT(
wp_usermeta.meta_value
ORDER BY wp_usermeta.meta_key
) AS name
FROM wp_users
LEFT JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
WHERE (wp_usermeta.meta_key = \'first_name\'
OR wp_usermeta.meta_key = \'last_name\')
AND wp_users.user_login = \'$spec_user\'
GROUP BY wp_users.ID";
$names = array();
$allresult=mysql_query($allquery) or die(mysql_error());
while($rows=mysql_fetch_array($allresult)){
$names[] = $rows[\'name\']; //name is from the group_concat in query
$emails[] = $rows[\'user_email\'];
}
问题是,这只返回一行。我认为这可能与线路有关:
和wp\\U用户。user\\u登录名=“$spec\\u user”
其中,$spec\\U user是用户输入的值。
理想情况下,我希望返回所有行,其中user\\u login列等于用户输入的内容。不仅来自该表,还来自usermeta表。
最合适的回答,由SO网友:Ethan Seifert 整理而成
数据透视查询怎么样?
这将返回具有first\\u name、last\\u name、user\\u login的行。然后可以使用WHERE子句添加任何需要的条件。
SELECT
MAX(CASE WHEN wp_usermeta.meta_key = \'first_name\' then wp_usermeta.meta_value ELSE NULL END) as first_name,
MAX(CASE WHEN wp_usermeta.meta_key = \'last_name\' then wp_usermeta.meta_value ELSE NULL END) as last_name,
wp_users.user_login
FROM wp_users
LEFT JOIN wp_usermeta
ON wp_users.ID = wp_usermeta.user_id
GROUP BY wp_users.user_login