Wordpressのテーブルからユーザーの詳細を返すためのクエリがあります。私が欲しいだけのカラム名をSELECTしていたとしても大丈夫でしょう、しかしWordpressの中に2つのカラムを持つusermetaテーブルがあります - 1はmetakeyと呼ばれ、もう1つはmeta valueと呼ばれます。
First_nameやlast_nameなどのメタキーから特定のユーザー情報を取得したいのですが、それらはすべて同じ列内にあります - メタ値。
これは私が持っているものです:
$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'];
}
問題は、これは単一行を返すことです。私はそれがラインと関係があるかもしれないと思う:
AND wp_users.user_login = '$ spec_user'
$ spec_userはユーザーが入力した値です。
理想的なのは、user_login列がユーザーが入力したものと等しい場所にすべての行が返されることです。そのテーブルからだけでなく、usermetaテーブルからも。
ピボットクエリはどうですか。
これは、first_name、last_name、user_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