• Resolved stevecoy

    (@stevecoy)


    here is the site I’m working on:
    https://speedways.postmodernsublime.com/nsd/tracks/
    It’s a directory of race tracks. In the top right corner, next to the map, I want to be able to filter the listings by state. So I’m entering the tracks’ states using a custom field, then adding this to the top of my category.php file:

    <?php
    $sortbystate = $_GET['state'];
    
    //get the current cat id
    $cat_obj = $wp_query->get_queried_object();
    $cat_id = $cat_obj->cat_ID;
    
    $states = $wpdb->get_col("SELECT meta_value FROM $wpdb->postmeta
    LEFT JOIN $wpdb->posts ON($wpdb->postmeta.post_id = $wpdb->posts.ID)
    LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
    LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
    WHERE $wpdb->term_taxonomy.term_id = $cat_id
    AND $wpdb->term_taxonomy.taxonomy = 'category'
    AND $wpdb->postmeta.meta_key = 'state'
    ORDER BY $wpdb->postmeta.meta_value ASC
    ");
    
    ?>

    And for the links to click to actually filter the posts:

    <ul class="track-filters">
    <?php foreach ($surfaces as $surface) {
    echo '<li><a href="?surface='.$surface.'">'.$surface.'</a></li>';}?>
    </ul>

    The problem is, when I have more than one track with the same state, the SQL query is outputting each instance of that custom field. That’s why there are 2 Alabamas right now.

    Can anyone tell me how to modify my query so that it will only display one result for each state?

    Thanks very much.

Viewing 3 replies - 1 through 3 (of 3 total)
Viewing 3 replies - 1 through 3 (of 3 total)
  • The topic ‘SQL query for filtering by custom field’ is closed to new replies.