2016-06-13 3 views
0

私は作業中のWordPressプロジェクトに挑戦しており、誰かがこれを達成するための最善の方法を教えてくれることを願っています。だから、カスタムポストタイプで高度なカスタムフィールドを使用しています。私は約10種類のフィールドを作成しています。私は、高度なカスタムフィールドの値と一致する必要がある検索を構築し、ポストIDを返す必要があります。可能であれば、このクエリをどのように構築しますか?

+------------------------------------------+ 
|meta_id | post_id | meta_key | meta_value | 
|------------------------------------------| 
| 1  | 24  | state | CA   | 
| 2  | 24  | city  | Yuba City | 
| 3  | 24  | type  | Full time | 
+------------------------------------------+ 

(より多くの、しかし短いそれを維持して):

カスタムフィールドは、それがwp_postmetaテーブルのデータだとこのようになります保存します。

私の検索フィールドが "State"、 "City"、 "Job Type"で、3つすべてが記入されている場合、3つのメタ値が検索されたものと一致する場合、post_idを返します。

私はこのような何かを複数の行に置く必要はありませんでした。

答えて

1

1つの方法は、集約を使用します。 1つの方法はjoinを使用します。例えば:

select ps.post_id 
from wp_postmeta ps join 
    wp_postmeta pc 
    on ps.post_id = pc.post_id and 
     ps.meta_kay = 'state' and ps.meta_value = 'CA' and 
     pc.meta_key = 'city' and pc.meta_value = 'Yuba City' join 
    wp_postmeta pt 
    on pt.post_id = ps.post_id and 
     pt.meta_key = 'type' and pt.meta_value = 'Full time'; 
+0

とpC !! .meta_value = 'Yuba City' join – splash58

+0

ありがとうございました!私はあなたが同じテーブル内でジョインをすることができたことを知りませんでした、それは素晴らしいです。だから私はあなたが私にここに示したものをとりました、そして、私は同じテーブル内での結合に関するいくつかの研究を行い、はるかに良い理解を持っています。今私が尋ねたいのは、あなたはそれを1つのテーブルに多数参加できますか?理由は、私はそれが状態になるまで働くことができるということです。しかし、私も市のための結合を追加すると、それは何も戻って停止します。 – lpangm03

+0

@ lpangm03。 。 。まあ、wp_postmeta(post_id、meta_key、meta_value)にインデックスを付けるのですか? –

関連する問題