0

我正在尝试根据搜索表单的输入创建具有多个条件的 SQL WHERE 查询以查找用户。当在表单中仅选择一个字段时,每个输入都起作用。当提交两个或多个输入字段的组合时,它不会给出任何结果。

请注意,此处的两个选项仅用于说明。我有更多的选择被使用。所以有必要单独搜索每个选项。

这是代码:

    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 回答