【问题标题】:PHP Wildcard to display all values of variablePHP通配符显示变量的所有值
【发布时间】:2017-02-03 19:04:05
【问题描述】:

我们为房地产设置了自定义帖子类型和一个搜索表单,以使用价格、城市、最新等来搜索这些自定义帖子类型。我们使用查询变量字符串/if 语句来显示结果,但我们排序选项有问题。我们提供三种排序选项:最新、价格低-高和价格高-低。

显示默认结果时,排序不正常,但在搜索下拉菜单中设置城市时,排序正常。

对于城市搜索,我们有以下代码:

if (isset($_POST['city'])) {
    $qs_city = get_query_var('city');
}
else {
    $qs_city = " ";

我相信这是由于上面代码的else 部分。我们需要某种通配符,如果未设置城市,则允许列出所有列出的城市。我们尝试了几种不同的方法,但似乎没有任何效果。我对此很陌生,因此如有必要,我可以更好地阐明上述任何内容。

这是用于排序的代码:

if (isset($_POST['sort'])) {
    $qs_sort = get_query_var('sort');
    switch ($qs_sort) {
        case 'newest':
            $args = array( 
            'post_type' => 'residential', 
            'posts_per_page' => 10,
            'paged' => $paged,
            'orderby' => 'L_StatusDate',
            'order' => 'DESC',
            'meta_query' => array(
                           array(
                                'key' => 'L_City',
                                'value' => $qs_city,
                                'compare' => 'LIKE'
                           ),
                           array(
                                'key' => 'L_SystemPrice',
                                'value'   => array( $qs_price_min, $qs_price_max ),
                                'type'    => 'numeric',
                                'compare' => 'BETWEEN'
                           ),
                           array(
                               'key' => 'LM_Int1_2',
                               'value' => $qs_beds,
                               'compare' => '>='
                           ),
                           array(
                               'key' => 'LM_Int1_3',
                               'value' => $qs_baths,
                               'compare' => '>='
                           )
                       )
           );
        break;
        case 'price-low':
            $args = array( 
            'post_type' => 'residential', 
            'posts_per_page' => 10,
            'paged' => $paged,
            'orderby' => 'L_SystemPrice',
            'order' => 'ASC',
            'meta_query' => array(
                            array(
                                'key' => 'L_City',
                                'value' => $qs_city,
                                'compare' => 'LIKE'
                           ),
                           array(
                                'key' => 'L_SystemPrice',
                                'value'   => array( $qs_price_min, $qs_price_max ),
                                'type'    => 'numeric',
                                'compare' => 'BETWEEN'
                           ),
                           array(
                               'key' => 'LM_Int1_2',
                               'value' => $qs_beds,
                               'compare' => '>='
                           ),
                           array(
                               'key' => 'LM_Int1_3',
                               'value' => $qs_baths,
                               'compare' => '>='
                           )
                       )
           );
        break;
        case 'price-high':
            $args = array( 
            'post_type' => 'residential', 
            'posts_per_page' => 10,
            'paged' => $paged,
            'orderby' => 'L_SystemPrice',
            'order' => 'DESC',
            'meta_query' => array(
                           //'relation'    => 'AND',
                           array(
                                'key' => 'L_City',
                                'value' => $qs_city,
                                'compare' => 'LIKE'
                           ),
                           array(
                                'key' => 'L_SystemPrice',
                                'value'   => array( $qs_price_min, $qs_price_max ),
                                'type'    => 'numeric',
                                'compare' => 'BETWEEN'
                           ),
                           array(
                               'key' => 'LM_Int1_2',
                               'value' => $qs_beds,
                               'compare' => '>='
                           ),
                           array(
                               'key' => 'LM_Int1_3',
                               'value' => $qs_baths,
                               'compare' => '>='
                           )
                       )
           );
        break;
    }
}
else {
    $args = array( 
            'post_type' => 'residential', 
            'posts_per_page' => 10,
            'paged' => $paged,
            'meta_query' => array(
                           //'relation'    => 'AND',
                           array(
                               'key' => 'L_StatusDate',
                               'orderby' => 'DESC'
                               //set default to sort by newest
                           ),
                           array(
                                'key' => 'L_City',
                                'value' => $qs_city,
                                'compare' => 'LIKE'
                           ),
                           array(
                                'key' => 'L_SystemPrice',
                                'value'   => array( $qs_price_min, $qs_price_max ),
                                'type'    => 'numeric',
                                'compare' => 'BETWEEN'
                           ),
                           array(
                               'key' => 'LM_Int1_2',
                               'value' => $qs_beds,
                               'compare' => '>='
                           ),
                           array(
                               'key' => 'LM_Int1_3',
                               'value' => $qs_baths,
                               'compare' => '>='
                           )
                       )
           );
}

?>

【问题讨论】:

    标签: php wordpress sorting wildcard custom-post-type


    【解决方案1】:

    您的情况的主要问题是“什么样的应用程序会对结果进行排序?”。看起来您在数据库上使用了某种类型。但是哪一个?如果是类似 SQL 的数据库, - 只需将 $qs_city = " " 替换为 $qs_city = "%";

    【讨论】:

    • 是的,我们使用我的 sql 作为数据库。当我们使用 % 时,默认结果不会显示任何内容,直到在搜索表单中选择了一个城市。我们希望默认显示所有城市。
    • @courtneyGCM,答案正是您所需要的。这是你问的通配符。您提供的代码均未包含将参数真正转换为 SQL 查询。但是在 SQL 查询中(在你的情况下是 MySQL),通配符是 % 符号。如果它对您不起作用,这意味着您的项目中有另一个代码需要检查。查看带有“%”符号的建议更改的真实 SQL 查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2014-01-07
    • 2018-01-01
    • 1970-01-01
    相关资源
    最近更新 更多