2017-02-24 122 views
1

我有2個分類標準:citystreetLEFT JOIN不起作用

我需要爲我的一個插件獲得postmeta

工作的代碼只有一個分類:

SELECT * 
FROM $wpdb->postmeta 
LEFT JOIN $wpdb->posts ON($wpdb->posts.ID = $wpdb->postmeta.post_id) 
LEFT JOIN $wpdb->term_relationships ON ($wpdb->postmeta.post_id = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) 
WHERE meta_key LIKE 'rwp_rating%' 
    AND ($wpdb->term_taxonomy.taxonomy = 'city' 
     AND $wpdb->term_taxonomy.term_id = '2') 

,但如果我追加

AND ($wpdb->term_taxonomy.taxonomy = 'street' AND $wpdb->term_taxonomy.term_id = '5') 

返回空的結果。

我也想這樣做:

SELECT * 
FROM $wpdb->postmeta 
LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) 
LEFT JOIN $wpdb->term_relationships ON ($wpdb->postmeta.post_id = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy AS t1 ON ($wpdb->term_relationships.term_taxonomy_id = t1.term_taxonomy_id) 
LEFT JOIN $wpdb->term_taxonomy AS t2 ON ($wpdb->term_relationships.term_taxonomy_id = t2.term_taxonomy_id) 
WHERE meta_key LIKE 'rwp_rating%' 
    AND (t1.taxonomy = 'city' 
     AND t1.term_id = '2') 
    AND (t2.taxonomy = 'street' 
     AND t2.term_id = '3331'); 

而且它不工作壓力太大。

請注意:我需要同時匹配,如:city = 2 AND street = 2
不是:city = 2 OR street = 2

+0

當LEFT JOIN,把右側表條件在ON子句來獲得真正的左聯接行爲。 (在WHERE中,您會得到常規的內部連接結果。) – jarlh

回答

0

你第一次嘗試將無法工作,因爲一個單一的分類記錄不能兼得城市和街道在裏面。

更新你的第二次嘗試這樣的:

SELECT * FROM $wpdb->postmeta 
LEFT JOIN $wpdb->posts ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) 
LEFT JOIN $wpdb->term_relationships ON ($wpdb->postmeta.post_id = $wpdb->term_relationships.object_id) 
LEFT JOIN $wpdb->term_taxonomy as t1 ON ($wpdb->term_relationships.term_taxonomy_id = t1.term_taxonomy_id AND t1.taxonomy = 'city') 
LEFT JOIN $wpdb->term_taxonomy as t2 ON ($wpdb->term_relationships.term_taxonomy_id = t2.term_taxonomy_id AND t2.taxonomy = 'street') 
WHERE meta_key LIKE 'rwp_rating%' AND t1.term_id = '2' AND t2.term_id = '3331'); 
+0

謝謝,但這隻能單獨運行。 不工作:t1.term_id ='2'AND t2.term_id ='3185'; 工作:t1.term_id ='2'; 工作:t2.term_id ='3185'; Working:t1.term_id ='2'OR t2.term_id ='3185'; –