2017-05-16 15 views
0

私は2つのテーブルを持っており、言語がengで寄付金額が25ユーロより高いすべての(ポスト)レコードを取得したい。MySQLクエリ。参加するデータを複数選択する

これはクエリが構築されたものです。

SELECT wp_posts.* , wp_postmeta.* 
FROM wp_posts 
JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id 
WHERE (wp_postmeta.meta_key = 'lang_code' AND wp_postmeta.meta_value = 'en') 
AND (wp_postmeta.meta_key = 'donated' AND CAST(wp_postmeta.meta_value AS SIGNED) > '25') 
AND wp_posts.post_type = 'donation' 
AND wp_posts.post_status = 'publish' 
ORDER BY wp_posts.post_date DESC 
LIMIT 1 OFFSET 0; 

テーブル#1(wp_posts)

--------------------------------------------------- 
ID | name   | post_type | post_status 
--------------------------------------------------- 
01 | test entry 1 | donation | publish 
02 | test entry 2 | donation | publish 
03 | test entry 3 | donation | awaiting 

テーブル#2(wp_postmeta)。

--------------------------------------------------- 
meta_id | post_id | meta_key | meta_value 
--------------------------------------------------- 
23  | 01  | lang_code | en 
84  | 01  | donated | 3100 
25  | 02  | lang_code | en 
63  | 02  | donated | 15 

このデモデータで期待される結果。

--------------------------------------------------- 
ID | name   | post_type | post_status 
--------------------------------------------------- 
01 | test entry 1 | donation | publish 

サブクエリを使用せずに必要な結果を得るにはどうすればよいですか?

+1

私は寄付金額の任意の列が表示されません。 –

+0

@TimBiegeleisenこれは、meta_key 'donated 'とmeta_valueカラムの一致するデータの組み合わせです。 @OP:なぜサブクエリを使いたくないのですか?あなたのSQLは動作しますか(それは可能性があります)。それがうまくいくなら、それはどこに問題がありますか? – daZza

+0

@daZzaサブクエリはクエリを本当に遅くしませんか?私はこの質問がOKだとも思った。しかし、複数のメタ/キー=>メタ/値でフィルタリングすることはできません。 – Daan

答えて

0

次の2つを使ってこれを行うことができます結合します

SELECT p.* , pml.*, pmd.* -- although you probably only want the value column 
FROM wp_posts p JOIN 
    wp_postmeta pml 
    ON p.ID = pml.post_id AND 
     pml.meta_key = 'lang_code' AND 
     pml.meta_value = 'en' JOIN 
    wp_postmeta pmd 
    ON p.ID = pmd.post_id AND 
     pmd.meta_key = 'donated' AND CAST(pmd.meta_value AS SIGNED) > 25 WHERE p.post_type = 'donation' AND p.post_status = 'publish' 
ORDER BY p.post_date DESC 
LIMIT 1 OFFSET 0; 
+0

偉大な、魅力のように動作します! (私はwp_posts.IDがp.IDである必要があります1エラーを得た) – Daan

関連する問題