PHP / MySQL查询在字段中查找字符串

时间:2012-03-21 16:28:57

标签: php wordpress

我编写了一个查询,搜索所有将X作为元/自定义字段值的帖子。

    // PSV National Query
        if ($_POST['vehicleType'] == 'psv' && $_POST['coverageRegion'] == 'national' ) {        

            $customkey = 'vehicleType'; 
            $customvalue = $_POST['vehicleType']; 

            $customkey1 = 'coverageRegion'; 
            $customvalue1 = $_POST['coverageRegion']; 

            $customkey2 = 'locationType'; 
            $customvalue2 = $_POST['locationType']; 

            global $wpdb;
            $my_posts = $wpdb->get_results("
                SELECT $wpdb->posts.* 
                FROM $wpdb->posts, $wpdb->postmeta, $wpdb->postmeta AS mt1
                WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 

                AND $wpdb->postmeta.meta_key = '$customkey'   
                AND $wpdb->postmeta.meta_value = '$customvalue'
                AND mt1.meta_key = '$customkey1'
                AND mt1.meta_value = '$customvalue1'
                AND mt2.meta_key = '$customkey2'
                AND mt2.meta_value = '$customvalue2'

                AND $wpdb->posts.post_status = 'publish' 
                AND $wpdb->posts.post_type = 'post'
                ORDER BY $wpdb->posts.post_date DESC
            ");

            $args = array(
            'meta_query' => array(
            array(
                'key' => $customkey,
                'value' => $customvalue,
                'compare' => '='
            ),
            array(
                'key' => $customkey1,
                'value' => $customvalue1,
                'compare' => '='
            ),
            array(
                'key' => $customkey2,
                'value' => $customvalue2,
                'compare' => '='
            )
            )
            );
            $query = new WP_Query( $args );

            foreach ($query as $post) :
            setup_postdata($post);

            echo '<div><a href="';
            the_permalink();
            echo '"></div>';
            the_title();

            endforeach; 

        }

现在,对于我的帖子,每个元键都有1个值,这样可以正常工作,但我希望有多个值。

例如......

“气,电,水”

当我添加多个值但是查询返回null时,我预设它,因为我说如果......

postmeta.meta_value = '$customvalue'

有人可以就我出错的地方给我建议吗?

2 个答案:

答案 0 :(得分:0)

如果在查询的where子句中使用多个匹配项,则应使用IN变量而不是=。

我在您的查询中看到的唯一一行,您使用$ customvalue就在这里

AND $wpdb->postmeta.meta_value = '$customvalue'

您应该将=更改为IN并将值与a分开,并且引用''如此例如

AND $wpdb->postmeta.meta_value IN ('gas','electricity','water')

我在上面的代码中抛弃了$ customvalue以得到IN值的分隔点。

希望这能让你走上正轨。

答案 1 :(得分:0)

为什么不使用内置的WP QUERY,它支持元字段数组运算符。

例如:

$query = new WP_Query( array( 
                          'meta_key'     => 'color', 
                          'meta_value'   => 'blue', 
                          'meta_compare' => '!='  
                       ));

参考:http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters