PHP/MySQL query find string in field

Ive written a query that searches for all posts that have X as a meta/custom field value.

    // 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; 

        }

Now for my post I have 1 value for each meta key and this works fine, I want to however have multiple values.

Read More

For example…

“gas, electricity, water”

When I add multiple values however the query returns null, I presumer its because im saying if…

postmeta.meta_value = '$customvalue'

Can anybody give me advice on where im going wrong?

Related posts

Leave a Reply

2 comments

  1. If you are using multiple matches in a query’s where clause you should use the IN variant istead of the =.

    The only row I see in your query where you use $customvalue is here

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

    You should change the = to IN and seperate the values with a , and quotes ‘ ‘ like this for example

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

    I ditched the $customvalue in the above code to make the point of the seperator of the IN value.

    Hopefully this puts you on the right track.