mik*_*kek 2 mysql wordpress join
我正在尝试使用以下查询同时搜索 wp_post 和 wp_postmeta:
$querystr = "
SELECT $wpdb->posts.*
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
AND $wpdb->postmeta.meta_key = 'City'
AND $wpdb->postmeta.meta_value = 'Vancouver'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'talents'
ORDER BY $wpdb->posts.post_date DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我搜索以 City=Vancouver 作为元字段的帖子。但是,我如何再添加一项条件,以免将不列颠哥伦比亚省温哥华市和华盛顿州温哥华市放在一起?
像这样:
AND ($wpdb->postmeta.meta_key = 'Country'
AND $wpdb->postmeta.meta_value = 'Canada')
AND ($wpdb->postmeta.meta_key = 'City'
AND $wpdb->postmeta.meta_value = 'Vancouver')
Run Code Online (Sandbox Code Playgroud)
小智 5
基于上面提到的链接,我能够创建此模式来基于 3 个元值和 1 个自定义分类法搜索自定义 posts_types。
所以我的结构是:
因此,下面的查询是在加拿大多伦多寻找一位会说法语的女性。
$querystr= "SELECT * FROM wp_posts
LEFT JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id)
LEFT JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id)
LEFT JOIN wp_postmeta v3 ON (wp_posts.ID = v3.post_id)
LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
LEFT JOIN wp_terms ON (wp_term_taxonomy.term_id = wp_terms.term_id)
WHERE
wp_terms.name = 'French' AND wp_term_taxonomy.taxonomy = 'Languages' AND wp_posts.post_status = 'publish' AND wp_posts.post_type = 'talents'
AND v1.meta_value = 'Toronto'
AND v2.meta_value = 'Canada'
AND v3.meta_value = 'female'
ORDER BY wp_posts.post_date DESC";
Run Code Online (Sandbox Code Playgroud)