#mysql #sql
#mysql #sql
Вопрос:
В принципе, когда поле meta_key равно «location», я хочу добавить дополнительное предложение where, чтобы провести сравнение на основе этого местоположения.
Я пробовал это с операторами Case и 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";
}
Спасибо и дайте мне знать, если я что-то недостаточно четко объяснил!
Ответ №1:
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 ";
}
Ответ №2:
простым решением было бы
WHERE
(meta_key = 'Location' AND Location = 'UK') OR meta_key <> 'Location'