wp_usermetaテーブルにあるカラムには、UMET.をつけて、
SELECT U.ID, UMET.first_name, UMET.last_name FROM wp_users AS U LEFT JOIN wp_usermeta AS UMET ON U.ID = UMET.user_id WHERE UMET.meta_key = ‘wp_user_level’ AND UMET.meta_value = ‘0’;
としてやればいいと思います。
トピック投稿者
yuc
(@ykm)
ありがとうございます。
こちらだと wp_usermetaには first_nameというフィールドはないのでエラーになってしまうようです。
テーブルの中身を見ずに書きましたので、的外れなものになってしまいました。
wp_usermetaには、first_nameやlast_nameの値が同じ列(meta_value)の異なる行
にありますので、それを列に配置するには少々厄介ですね。
一応、first_nameとlast_nameを同じ列(NAME)に入れていいのであれば、以下の
ようにすることで取り出すことができると思いますが、いかがでしょうか?
ちなみに、以下では、wp_usersテーブルから、IDとログイン名も取り出しています。
wp_usersからの取出しには、列名の前に「U.」をつけてやればいいです。
SELECT U.ID AS ID, U.user_login AS LOGIN_NAME, GROUP_CONCAT(UMET.meta_value ORDER BY UMET.umeta_id SEPARATOR ‘ ‘) AS NAME FROM wp_users AS U LEFT JOIN wp_usermeta AS UMET ON U.ID = UMET.user_id WHERE UMET.user_id = (SELECT user_id FROM wp_usermeta WHERE meta_key = ‘wp_user_level’ AND meta_value = ‘0’ ) AND (meta_key = ‘first_name’ OR meta_key = ‘last_name’) group by UMET.user_id
first_nameとlast_nameの列を分ける場合は、スマートではありませんが、以下のように
してもいいかもしれません。
SELECT U.ID AS ID, U.user_login AS LOGIN_NAME, UMET_F.meta_value AS F_NAME, UMET_L.meta_value AS L_NAME FROM wp_users AS U JOIN (SELECT user_id, meta_value FROM wp_usermeta WHERE user_id = (SELECT user_id FROM wp_usermeta WHERE meta_key = ‘wp_user_level’ AND meta_value = ‘0’) AND meta_key = ‘first_name’) AS UMET_F ON U.ID = UMET_F.user_id JOIN (SELECT user_id, meta_value FROM wp_usermeta WHERE user_id = (SELECT user_id FROM wp_usermeta WHERE meta_key = ‘wp_user_level’ AND meta_value = ‘0’) AND meta_key = ‘last_name’) AS UMET_L ON U.ID = UMET_L.user_id ORDER BY U.ID
トピック投稿者
yuc
(@ykm)
hiramine様
丁寧なご回答ありがとうございます。
SQLにあまり慣れていないので、ひとまず教えていただいたSQLを熟読したいと思います。
ありがとうございました。