0

ユーザーを検索するための検索フォームの入力に基づいて、複数の条件を持つ SQL WHERE クエリを作成しようとしています。各入力は、フォームで 1 つのフィールドのみが選択されている場合に機能します。2 つ以上の入力フィールドの組み合わせが送信された場合、結果は得られません。

ここでの 2 つのオプションは、説明のためのものであることに注意してください。より多くのオプションが使用されています。したがって、各オプションを個別に検索する必要があります。

コードは次のとおりです。

    global $wpdb;

        $user_ids = array();
        $user_query = null;

        if (isset($_REQUEST['search']) && !empty($_REQUEST['search']) ) {
            $s = $_REQUEST['search'];
            $user_query .= "((meta_key='first_name' AND meta_value LIKE '%".$s."%') OR (meta_key='last_name' AND meta_value LIKE '%".$s."%') OR (meta_key='display_name' AND meta_value LIKE '%".$s."%') OR (meta_key='nice_name' AND meta_value LIKE '%".$s."%'))";
        }

        if (isset($_REQUEST['email']) && !empty($_REQUEST['email']) ) {
            $s = $_REQUEST['email'];
            if ($user_query) {
            $user_query .= "AND (meta_key='user_email' AND meta_value='".$s."')";
            } else {
            $user_query .= "(meta_key='user_email' AND meta_value='".$s."')";
            }
        }


        if (!empty($user_query)) {
            $wp_users = $wpdb->get_results("SELECT user_id FROM $wpdb->usermeta JOIN $wpdb->users ON $wpdb->usermeta.user_id=$wpdb->users.ID WHERE ($user_query)");
        }

実行する必要がある SQL クエリは次のとおりです。

$wp_users = $wpdb->get_results("SELECT user_id FROM $wpdb->usermeta JOIN $wpdb->users ON $wpdb->usermeta.user_id=$wpdb->users.ID WHERE (((meta_key='first_name' AND meta_value LIKE '%".$s."%') OR (meta_key='last_name' AND meta_value LIKE '%".$s."%') OR (meta_key='display_name' AND meta_value LIKE '%".$s."%') OR (meta_key='nice_name' AND meta_value LIKE '%".$s."%')) AND (meta_key='user_email' AND meta_value='".$s."'))");

上記のクエリでエラーを見つけるのを手伝ってください。

4

1 に答える 1

0

WP_User_Queryを試してください。この種のクエリが非常に簡単になります。それに関する素晴らしいドキュメントがあります。

于 2013-07-19T23:38:25.153 に答える