2011-01-30 20 views
3

私は3つのテーブル:categories,content_infoおよびcontentを持っています。複数のデータベース結合

  • categoriesテーブルは、カテゴリのidとそのparentカテゴリのIDが含まれています。
  • content_infoには、投稿IDの場合はentry_id、投稿カテゴリIDの場合はcat_idの2つの列が含まれています。
  • contentの表は、ポストについては複数の列が含まれている - などIDtitle

として、私は、カテゴリのparentに対応するURLと呼ばれるPARENT_IDで変数を持っています。 parent_idの値がparentのカテゴリに属する​​すべてのPOSTS(CATEGORIESではなく)をリストしたいと思います。

たとえば、parent_idの値が5であるとします。各投稿はIDが20のカテゴリに属している可能性がありますが、そのカテゴリは親カテゴリ(IDが5)に属します。現在のparent_idが何であっても、parentの値を持つカテゴリに属する​​すべての投稿をリストしたいと思います。

PHPを変更するのではなく、MySQLの結合でこれを行う方法はありますか?

答えて

3

これはそれを行う必要があります。

SELECT c.* FROM content 
    JOIN content_info ci ON ci.entry_id=c.id 
    JOIN categories cat ON cat.id=ci.cat_id 
WHERE cat.parent_id=<parent_id> 

この戻り親はparent_id

またはサブクエリであるカテゴリに属する​​すべての記事(content行):

SELECT c.* FROM content 
JOIN content_info ci ON ci.entry_id=c.id 
WHERE ci.cat_id IN (SELECT id 
        FROM categories cat 
        WHERE cat.parent_id=<parent_id>) 
0
SELECT c.* 
FROM content c, 
    categories cat, 
    content_info ci 
WHERE c.id = ci.entry_id 
AND cat.id = ci.cat_id 
AND cat.parent_id = 5