[WordPress] 2 つ (以上) の postmeta フィールドに基づくレコードへのアクセス – オーダーメイドの SQL クエリ

スポンサーリンク

Question

ワードプレスのサイトを実行だし、2 つ (以上) のフィールドに基づく postmeta テーブルから情報を取得しようとしています。ここでは私のクエリは、これまで:

SELECT wp_postmeta.* FROM wp_postmeta
LEFT JOIN wp_posts ON wp_posts.ID = wp_postmeta.post_id
WHERE wp_posts.post_status = 'publish'
AND wp_posts.post_type = 'post'
AND ( wp_postmeta.meta_key = 'relevantLine' AND wp_postmeta.meta_value = '339' )
AND (
( wp_postmeta.meta_key = 'brandOne' AND wp_postmeta.meta_value = '30' )
OR ( wp_postmeta.meta_key = 'brandTwo' AND wp_postmeta.meta_value = '30' )
OR ( wp_postmeta.meta_key = 'brandThree' AND wp_postmeta.meta_value = '30' )
)
AND wp_posts.post_date >= '2014-03-25'
AND wp_posts.post_date <= '2014-11-27'
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC 

postmeta キー"relevantLine"339 に設定され postmeta キー"brandOne"30 (または 30 に設定されている"brandTwo"または"brandThree"を 30 に設定) に設定されているレコードにアクセスしようとしています

誰がどんな考えこれを行う方法ですか?

上記のクエリの作業ではありません

多くのおかげで

PS.私は知っている wp クエリ機能を使用できるがこの方法可能であれば、クエリを実行したいと思います

答え

あなたとしてを書き換えることができます下

SELECT m.* ,m1.*
FROM wp_postmeta m
JOIN wp_posts p ON p.ID = m.post_id
JOIN wp_postmeta m1 ON p.ID = m1.post_id
WHERE p.post_status = 'publish'
AND p.post_type = 'post'
AND  m.meta_key = 'relevantLine' AND m.meta_value = '339' 
AND m1.meta_key IN ('brandOne','brandThree','brandTwo')
AND m1.meta_value = '30'
AND p.post_date >= '2014-03-25'
AND p.post_date <= '2014-11-27'
GROUP BY p.ID
ORDER BY p.post_date DESC 

この構造体は、呼び出し

EAV

エンティティの属性値と比較する別のキーとして、テーブルを結合する必要がある別のキーの間に一致させるため私は 1 つだけ結合に加えた wp_postmeta 30 である 1 つの値のキーが、クエリを簡略化する

IN()

を使用する


GROUP BY

を使用してすべての集計関数は不定の結果を

http://stackoverflow.com/questions/27184936/bespoke-sql-query-accessing-records-based-on-2-or-more-postmeta-fields

スポンサーリンク

Leave a Reply