2016-05-09 8 views
0

三は、テーブルには、記事情報を保存しますは、MySQL 5では1つのカテゴリーとサブカテゴリーからすべての記事を選択する方法

lftとrgtの値がネストされたセット、例:

  root 
      (0,15) 
     / \ 
     / \ 
     cat1 cat2 
     (1,6) (7, 14) 
     /| /| \ 
    /| /| \ 
    /| / | \ 
cat3 cat4 cat5 cat6 cat7 
(2,3) (4,5) (8,9)(10,11)(12,13) 

記事テーブル:

id, title 

article_category_mapテーブル:

article_id, category_id 

MySQLの内の1つのカテゴリーとサブカテゴリーからすべての記事を選択するには?

私は期待して:

1、CAT2およびCAT5やCAT6およびCAT7のすべての記事を表示するには、CAT2をクリックします。

2、cat5をクリックすると、cat5のすべての記事のみが表示されます。

3、ルートをクリックすると、すべてのカテゴリ(cat1、cat2、cat3、cat4、cat5、cat6、cat7 ...を含む)のすべての記事が表示されます。

+1

あなたのサブキャットテーブルは、これも投稿してください。また、既知のCat IDのデータを取得したいのですか、動的Cat IDに基づいてデータを取得したいのですか? – Aparna

答えて

0

binary treeの「左」と「右」のプロパティは「lft」と「rgt」となります。

がカテゴリのIDであり、Db::fetchメソッドがデータベースから単一行をフェッチすると、Db::fetchAllメソッドはSQLクエリに一致するすべての行をフェッチします。

カテゴリの「左」と「右」を取得し、カテゴリとそのサブカテゴリから記事を取得できます。

if (! $cat = Db::fetch("SELECT lft, rgt 
    FROM categories WHERE id = $category_id")) 
{ 
    // handle error 
} 

$articles = Db::fetchAll("SELECT a.* FROM article a 
    JOIN article_category_map m ON m.article_id = a.id 
    JOIN categories c ON c.id = m.category_id 
    WHERE c.id BETWEEN ${cat['lft']} AND {$cat['rgt']}"); 
関連する問題