2010-11-28 29 views
0

上のクエリ私はかなり長いSQLクエリがあります。MySQLの - と結合されたテーブル

SELECT *, content.contentID AS thisID 
FROM content 
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID 
LEFT JOIN link_countries ON content.contentID = link_countries.contentID 
LEFT JOIN link_sections ON content.contentID = link_sections.contentID 
WHERE status = '1' AND typeID = '1' 
GROUP BY contentID 
ORDER BY creationDate DESC 

を、私は戻って結果セットを取得し、私がやりたいことはどこから来ているsectionID(すべての結果を表示していますつまり、セクション3とセクション4の両方にあるすべての結果です。

次のクエリは何も返しません。おそらく、これは単一のsectionIDは3と4に等しい。私が必要とするのはcontent.contentIDで、sectionIDは3と4に等しい。

SELECT *, content.contentID AS thisID 
FROM content 
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID 
LEFT JOIN link_countries ON content.contentID = link_countries.contentID 
LEFT JOIN link_sections ON content.contentID = link_sections.contentID 
WHERE status = '1' AND typeID = '1' AND (sectionID = '3' AND sectionID = '4') 
GROUP BY contentID 
ORDER BY creationDate DESC 
+1

*私は必要なものそれは不可能です* 3と4に等しいセクションIDを持つすべてのcontent.contentIDです。同じcontent.contentIDを持ち、セクションIDがそれぞれ3と4の* 2行がありますか? –

+0

こんにちは。はい、content.contentIDが1(これは単一の記事レコードです)と等しいと想像してください。この記事はさまざまなセクションに分かれています。だから私は、セクション3と4の両方にある記事レコードだけが必要です。 – Chris

+0

あなたのスキーマを投稿できますか? –

答えて

2

あなたは副問い合わせを使用することができます。

SELECT *, content.contentID AS thisID 
FROM content 
LEFT JOIN link_keywords ON content.contentID = link_keywords.contentID 
LEFT JOIN link_countries ON content.contentID = link_countries.contentID 
LEFT JOIN link_sections ON content.contentID = link_sections.contentID 
WHERE status = '1' AND typeID = '1' AND 
     content.contentID IN (SELECT section3.contentID 
          FROM link_sections AS section3 
          WHERE sectionID = 3) AND 
     content.contentID IN (SELECT section4.contentID 
          FROM link_sections AS section4 
          WHERE sectionID = 4) 
GROUP BY contentID 
ORDER BY creationDate DESC 
+0

+1これは、より速く実行し、私のよりもエレガントです。 –

+0

素晴らしい - 私はあなたが私に与えてくれた助けに本当に感謝しています。ありがとうございました。 – Chris

1

これを試してください:あなたがする必要がどのような

SELECT 
    *, 
    content.contentID AS thisID 
FROM content 
    LEFT JOIN link_keywords 
    ON content.contentID = link_keywords.contentID 
    LEFT JOIN link_countries 
    ON content.contentID = link_countries.contentID 
    LEFT JOIN link_sections 
    ON content.contentID = link_sections.contentID 
WHERE 
(SELECT COUNT(contentID) AS counter FROM link_sections s2 WHERE s2.contentID=content.contentID AND (sectionID='3' OR sectionID='4') GROUP BY contentID)=2 
    AND STATUS = '1' 
    AND typeID = '1' 
    AND (sectionID = '3' 
     OR sectionID = '4') 
GROUP BY content.contentID 
ORDER BY creationDate DESC; 
+0

こんにちは - はい、私はそれを試みましたが、いずれかのsectionID 3またはsectionID 4にあるcontentIDを返します。私が欲しいのは、両方のセクションの項目です。 – Chris

+0

編集して要件に対応しましたが、[Daniel's solution](http://stackoverflow.com/questions/4299007/mysql-and-query-on-joined-table/4299205#4299205)の方が優れています。それは比較のためにここにある。 –

0

は、セクションID =「3」で行を選択し、セクションID =「4」で行の結果を交差しています。

関連する問題