2017-02-24 13 views
1

私は2つのタクソノミ:citystreetを持っています。LEFT JOINは機能しません

私のプラグインの1つに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

は行動に参加します。 (どこにいるときは、定期的な内部結合の結果が得られます。) – jarlh

答えて

0

あなたの最初の試みは動作しません。

これまで2番目の試み更新:LEFT JOINをすると、真左を取得するにはON句で右サイドテーブルの条件を入れて、

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'; 作業中:t1.term_id = '2' OR t2.term_id = '3185'; –

関連する問題