2013-03-02 10 views
5

私はWP Data Tablesを使用してSQL DBからテーブルを作成しています。ワードプレスのバックエンドで使用するコードの例は次のようになります。カスタムポストタイプと複数カスタムフィールドのSQLクエリ

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 

ポストメタからカスタムフィールド値を取得しようとしています。

私はp.IDが代わりにpost_idのに必要だったことが判明し、私はmeta_keyを検索必要があること:ここで私はこれまで...

SELECT post_id, post_date 
FROM wp_posts 
WHERE post_type = 'custom_post_type' 
AND post_status = 'publish' 
AND SELECT custom_field_key_1, custom_field_key_2, custom_field_key_3 
FROM wp_postmeta 
WHERE post_id = post_id 

UPDATEたものです。以下のような何か...

SELECT p.post_title, 
     p.post_date, 
     pm.meta_key = 'custom_field_key' 
FROM wp_posts p 
INNER JOIN wp_postmeta pm 
ON p.ID = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
+0

私はあなたがここで 'JOIN'が必要だと信じています。 –

答えて

0

は、標準のSQLがサポートされていますが、このような何か(未テスト)が必要になりますと仮定すると:INNER JOINを使用し

SELECT w.post_id, w.post_date, m.custom_field_key_1, m.custom_field_key_2, m.custom_field_key_3 
FROM wp_posts w, wp_postmeta m 
WHERE post_type = 'custom_post_type' AND post_status = 'publish' 
AND w.post.id = m.post.id 
4

を:

SELECT p.post_id, 
     p.post_date, 
     pm.custom_field_key_1, 
     pm.custom_field_key_2, 
     pm.custom_field_key_3 
FROM wp_posts p 
    INNER JOIN wp_postmeta pm 
     ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
    AND p.post_status = 'publish' 
+0

この種の作品と私はアップデートを含んでいました。 – user2106176

+0

@ user2106176 - これは助かりました。あなたの更新を見て、私はあなたのWHERE句に "pm.meta_key = 'custom_field_key'"を移動する必要があると思います。 SELECT文でフィールド値を設定することはできません。運が良かった! – sgeddes

+0

p.post_idをp.IDに変更すると、私の仕事に役立ちました。 –

0

あなたはこれを試すことができます。

SELECT p.post_id, p.post_date, 
    pm.custom_field_key_1, pm.custom_field_key_2, pm.custom_field_key_3 
FROM wp_posts p 
JOIN wp_postmeta pm ON p.post_id = pm.post_id 
WHERE p.post_type = 'custom_post_type' 
AND p.post_status = 'publish' 
0

回答を更新しましたが、私はあなたの例を取っ​​て、私はこれを働い:

SELECT p.ID, 
     p.post_title, 
     pm.meta_value as 'value1', 
     pma.meta_value as 'value2' 

FROM wp_posts p 
     INNER JOIN wp_postmeta AS pm ON pm.post_id = p.ID 
     INNER JOIN wp_postmeta AS pma ON pma.post_id = p.ID 

WHERE 
     pma.meta_key = 'custom_field_key_1' AND 
     pm.meta_key = 'custom_field_key_2' AND 

     p.post_type = 'your_post_type' AND 
     p.post_status = 'publish' 

だからここに私は、同じテーブルにホストされている値のエイリアスASを使用してwp_postmetapost_idためINNER JOINとそれがすべてですしています。

参考文献: Multiple Inner join same table

これにより、あなたは、投稿や、あなたの選択したカスタムフィールドを持つ配列を取得します:

array(1) { 
    [0]=> object(stdClass)#341 (4) { 
      ["ID"]=> string(1) "1123" 
      ["post_title"]=> string(15) "Your post title" 
      ["custom_field_key_1"]=> string(12) "Your value 1 " 
      ["custom_field_key_2"]=> string(29) "Your value 2" 
} 

あなたは必要な数だけエイリアスとmeta_keyを追加することができます。このヘルプが欲しい!

関連する問題