• 解決済 yuc

    (@ykm)


    お世話になります。

    wp_usersとwp_usermetaテーブルを利用して、 ユーザレベルが0のユーザ一覧を作ろうとしています。

    SELECT U.ID 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’;

    ひとまず上記SQLでユーザIDだけ抽出できるようにはなったのですが、ここから このままだとidのみしか出せないです。idに加え first_name, last_nameなど usermetaにある他の情報も出力するにはどのようにすればよいでしょうか。

    初歩的な(?)SQLの質問でwordpressとは直接関係ないのかもしれませんが、よろしくお願いいたします。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 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を熟読したいと思います。

    ありがとうございました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「ユーザーレベルが0のユーザ一覧をSQLで」には新たに返信することはできません。