• 解決済 kleza

    (@kleza)


    いつもお世話になっております。

    usermetaテーブルに追加したカスタムフィールド(meta_key)の値を指定し、そのmeta_valueの値をループで出力して検索項目のセレクトメニューに表示させようとしています。

    usermetaテーブル内における指定したmeta_keyに
    存在するmeta_valueの一覧を。

    例えば、カスタムフィールド「wpcf-address_pref」に

    ・東京都
    ・大阪府
    ・北海道

    が存在したら、これらをセレクトメニューに出力というふうに。

    以下の例(投稿タイトル一覧を出力)を適宜変更すれば
    出来るかと思ったのですが、meta_keyを指定すれば
    存在する全てのmeta_keyの値が、meta_valueを指定すれば
    存在する全てのmeta_valueの値が表示されてしまって(当然ですが)
    meta_keyの値に「wpcf-address_pref」を持つmeta_valueの値の一覧を
    取得することが出来ません。

    <?php
    $data = $wpdb->get_results( "SELECT post_title FROM $wpdb->posts" );
    foreach ($data as $value) {
     echo $value->post_title . "<br />";
    }
    ?>

    こういったwpdbを使ったデータベースの操作が初めてで
    とんちんかんなことをしているかもしれませんが、このような利用は
    少なくないのではないかと思いましてアドバイスを求める
    投稿をさせていただきました。かなり検索したのですが検索の仕方が
    悪いのか、これというものにヒットしませんで。(当方の読解力が
    足りないせいもあると思いますが)

    元日早々でコメントをいただくのは無理かと思いますが
    目に止まった方がおられましたらアドバイスを何卒宜しくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • あけましておめでとうございます。

    お望みのリストは、下のクエリで取得できます。意味は、「$wpdb->usermeta テーブルから、meta_key カラムに wpcf-address_pref を持つ行の meta_value カラムの値を重複なしに抽出しろ」というものです。

    $data = $wpdb->get_col("SELECT DISTINCT meta_value FROM $wpdb->usermeta WHERE meta_key='wpcf-address_pref'");
    foreach ($data as $value) {
      echo $value . "<br />";
    }

    47都道府県しかないのであれば、ページが表示されるたびにデータベースにアクセスするより、最初から45要素の配列を用意した方が圧倒的に速いのではないでしょうか?

    トピック投稿者 kleza

    (@kleza)

    kjmtshさん

    あけましておめでとうございます。
    お正月から早速のアドバイス有難うございます!

    クエリの意味まで丁寧に解説くださり
    大変感謝です。

    最期のアドバイスもごもっともですね。
    自分もこちらに投稿してからそれで十分、むしろ
    いいのでは?と思っていたのでやはりという感じです(^^ゞ

    47都道府県と決まっているのですものね。

    とはいえ、またひとつ勉強になりました。

    素早いコメント、丁寧なアドバイス
    本当にありがとうございました。

    またお世話になることもあるかもしれませんが
    今後共よろしくお願い申し上げます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「usermetaテーブル内のカスタムフィールドの値の一覧を出力したい」には新たに返信することはできません。