2009-03-26 16 views
1

次の2つのクエリを組み合わせて2つの組み合わせを作成するにはどうすればよいですか?2つのMySQLクエリを組み合わせる(別のクエリの内容を選択する)

SELECT * 
FROM post_attributes 
WHERE name IN ('title', 'body'); 

SELECT id, url, created_at, name, value 
FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
ORDER BY id; 

アイデアは、それは、それはブログエンジンChyrpからブログの記事の、タイトルと本文を作成した時のURL、ポスト番号を抽出することが、同じデータベースに格納されている他のデータを無視します。

私はこれを間違った方法で考えています。使用するより適切な機能がありますか? (post_attributesは、属性値を格納する「価値」という名前の列を持っていると仮定して)、これが最も効率的である

SELECT id, url, created_at, name, value, post_attributes.* 
    FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
    AND name IN ('title', 'body') 
ORDER BY id; 
+0

、あなただけのコメント – karim79

答えて

4
SELECT posts.id, posts.url, posts.created_at, posts.name, posts.value 
    FROM posts, post_attributes 
WHERE posts.id = post_attributes.post_id 
AND post_attributes.name IN ('title', 'body') 
ORDER BY id; 

あなたはポストの属性からすべてのフィールドをしたい場合は最後にpost_attributes.*を追加します。

+0

CURSESに...わずか20秒遅すぎる属している列のどの言っていません。私はあなたのクエリと@ FerranBのクエリの両方が、一致するすべてのブログ投稿(タイトル属性用と本文用)の2行になると思います。私が投稿したクエリは投稿ごとに1行ずつ表示されます。 @nickcarltonが気にするかどうかはわかりません。 – belgariontheking

+0

(2番目のクエリで)どのテーブル –

+0

@ジェレミー:良い点。 – belgariontheking

2

あなたはこのを探しています。

SELECT id, url, created_at, name, value, p_title.value, p_body.value 
FROM posts p 
INNER JOIN post_attributes p_title on p.id = p_title.post_id 
INNER JOIN post_attributes p_body on p.id = p_body.post_id 
ORDER BY p.id; 
0

わからない場合は、この作業をする必要があります:

0

素晴らしいパフォーマンス:第二思想に

select p.id, pa.title, pa.body, pa.created_at, pa.name, pa.value from post_attributes pa, posts p where p.id = pa.post_id and (pa.name = 'title' or pa.name = 'body') 
関連する問題