2011-04-10 98 views
4

基本上,当meta_key字段等于“位置”时,我想添加一个额外的where子句来根据该位置进行比较。MySQL有条件的地方条款

我试过这种情况与案例和IF语句,但似乎无法得到它的工作,任何想法,我哪里出错了?

$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"; 

} 

谢谢,让我知道如果我没有足够清楚地解释任何事情!

回答

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

谢谢,这正是我想要的。 – 2011-04-10 23:13:27

3

简单的解决办法是

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