2011-04-10 8 views
4

Fondamentalement, lorsque le champ meta_key est égal à «emplacement», je veux ajouter une clause where supplémentaire pour faire une comparaison basée sur cet emplacement.MySQL conditionnel où Clause

J'ai essayé ceci avec les instructions Case et IF, mais je n'arrive pas à le faire fonctionner, des idées où je me trompe?

$query = " 
SELECT wp_posts.ID, wp_posts.post_title, wp_posts.post_type, 
wp_postmeta.meta_key, wp_postmeta.meta_value, wp_postmeta.post_id, 
wp_term_relationships.object_id, wp_term_relationships.term_taxonomy_id, 
wp_term_taxonomy.term_id, 
wp_terms.term_id, wp_terms.name 

FROM wp_posts 

/* Join Post Meta Table */ 
JOIN wp_postmeta 
ON wp_posts.ID = wp_postmeta.post_id 

/* Join Term Relationships Table to get the taxonomy id */ 
JOIN wp_term_relationships 
ON wp_posts.ID = wp_term_relationships.object_id 

/* Join Term Taxonomy Table to get the Term ID */ 
JOIN wp_term_taxonomy 
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id 

/* Finally Join to the Terms table to get the Category Name *sigh* */ 
JOIN wp_terms 
ON wp_term_taxonomy.term_id = wp_terms.term_id 

WHERE post_type = 'listing' AND 
wp_postmeta.meta_key IN ('locations', 'email', 'phone-number')"; 

if(isset($location)) { 

    $query .= " 
    IF wp_postmeta.meta_key='location' 
     THEN AND wp_postmeta.meta_value LIKE '".mysql_real_escape_string($location)."' 
    END IF"; 

} 

Merci et faites-moi savoir si je n'ai rien expliqué assez clairement! solution simple

Répondre

12
if(isset($location)) { 
     $query .= " AND 
     CASE 
     WHEN wp_postmeta.meta_key='location' THEN wp_postmeta.meta_key 
     LIKE '".mysql_real_escape_string ($location)."' 
     ELSE 1=1 
     END "; 
     } 
+0

Merci, c'est exactement ce que je voulais. –

3

serait

WHERE 
    (meta_key = 'Location' AND Location = 'UK') OR meta_key <> 'Location'