AND和OR在WordPress wpdb中查询

时间:2014-01-30 21:35:30

标签: php mysql sql wordpress wpdb

是的,我有read through the entire wpdbezSQL所以我对wpdb类可以做什么有很好的理解...本质上wpdb是SQL对javascript的jQuery是什么!

由于我之前从未这样做过,所以我不会在不尝试SQL的情况下感觉太糟糕,但这就是我今天所做的事情,表明我已经尝试过,但后来才读到AND和OR不能使用在WP_Query中:\

最终结果应该是,如果用户从“ProductType”下拉列表中选择并单击搜索按钮,该页面应根据该选项菜单中的该术语返回结果。如果他们从ProductGroup 中选择一个选项并点击搜索按钮,则结果需要根据选择返回。

如果两个下拉菜单都选择了选项,则需要查询ProductType和ProductGroup 并返回结果。

    $args = array(

        'post_type' => 'product', 
        'posts_per_page' => -1, 
        'orderby' => 'title', 
        'order' => 'ASC',
        'relation'=>'AND', // or OR
        'relation'=>'OR',  // this is naturally not correct
        'meta_query' => array(
               array(
                   'key'        =>  'product_type',
                   'value'      =>  $ProductType,
                   'compare'    =>  'LIKE'
               ),
               array(
                    'key'       =>  'product_group',
                    'value'     =>  $ProductGroup,
                    'compare'   =>  'LIKE'
                )
            )

    );

        <form name="x" action="" method="GET" class="search-results-form" >
          <select name="productType" class="search-product-type">
                <option value="">Product Type</option>
                <option value="ProductType1">ProductType1</option>
                <option value="ProductType2">ProductType2</option>
          </select>
          <select name="productGroup" class="search-product-type">
                <option value="">Product Type</option>
                <option value="ProductGroup1">ProductGroup1</option>
                <option value="ProductGroup2">ProductGroup2</option>
          </select>
          <input type="submit" value="SEARCH" class="submit-button btn" />
        </form>

我希望这是有道理的,所以如果有人能给我一个起点,我会很感激。

2 个答案:

答案 0 :(得分:0)

你可以使用这样的关系条件: -

$args = array(
    'post_type' => 'product', 
    'posts_per_page' => -1, 
    'orderby' => 'title', 
    'order' => 'ASC',
    'meta_query' => array(
        'relation'=>'AND', // or OR
        array(
            'key'        =>  'product_type',
            'value'      =>  $ProductType,
            'compare'    =>  'LIKE'
        ),
        array(
            'key'       =>  'product_group',
            'value'     =>  $ProductGroup,
            'compare'   =>  'LIKE'
        )
    )
);

您也可以根据需要更改relation ...

答案 1 :(得分:0)

我知道这是一个老问题,但万一有人偶然发现(就像我一样),这应该有效:

<?php
    $args = array(
        'post_type' => 'product', 
        'posts_per_page' => -1, 
        'orderby' => 'title', 
        'order' => 'ASC',
        // 'relation'=>'AND', // Not required, as it defaults to "AND"
        'meta_query' => array()
    );

    if (isset($_GET['product_type']) && !empty($_GET['product_type'])) {
        $args['meta_query'][] = array(
            'key'        =>  'product_type',
            'value'      =>  $ProductType,
            'compare'    =>  'LIKE'
        );
    }
    if (isset($_GET['product_group']) && !empty($_GET['product_group'])) {
        $args['meta_query'][] = array(
            'key'        =>  'product_group',
            'value'      =>  $productGroup,
            'compare'    =>  'LIKE'
        );
    }
?>

<form name="x" action="" method="GET" class="search-results-form" >
    <select name="productType" class="search-product-type">
        <option value="">Product Type</option>
        <option value="ProductType1">ProductType1</option>
        <option value="ProductType2">ProductType2</option>
    </select>
    <select name="productGroup" class="search-product-type">
        <option value="">Product Type</option>
        <option value="ProductGroup1">ProductGroup1</option>
        <option value="ProductGroup2">ProductGroup2</option>
    </select>
    <input type="submit" value="SEARCH" class="submit-button btn" />
</form>