WordPress JOIN wp_post 和 wp_postmeta

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。

所以我的结构是:

  1. 每个自定义职位(人才)都有 3 个自定义字段(城市、国家/地区、性别)。
  2. 每个自定义帖子都属于自定义分类“语言”,具有某些类别,例如英语、西班牙语、俄语等。

因此,下面的查询是在加拿大多伦多寻找一位会说法语的女性。

$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)