MySQL Conditional Where clause

Basically, when the meta_key field is "location", I want to add an additional where clause to make a comparison based on that location.

I tried this with Case and IF statements, but cant get it to work, any ideas I'm wrong in?

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

Thank you and let me know if I do not explain anything clearly enough!

+4
source share
2 answers
 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 "; } 
+12
source

a simple solution would be

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

Source: https://habr.com/ru/post/1347456/


All Articles