1

カテゴリテーブルがあります

cat_id, cat_name, parent_id, cat_slug

次のような記事テーブルがあります

art_id, cat_id, art_title, art_content, author_id .....

そして私のユーザーテーブル

user_id, username, pw, .....

これらのデータを使用して、サブカテゴリにリストされているすべての記事を表示したい

例えば:

メイン カテゴリの URL は: mydomain.com/cat/business サブ カテゴリの URL は: mydomian.com/cat/business/advertising

そのため、人々がメイン カテゴリにアクセスすると、cat_id がメイン カテゴリとして言及されていなくても、メイン カテゴリのサブカテゴリ リストの記事が表示されます。ビジネス カテゴリ ページでビジネスのサブカテゴリ記事のすべてのサブ カテゴリを一覧表示したい。

クエリは何ですか、私はこれを達成しようとする必要があります

助けていただければ幸いです。ありがとう

4

2 に答える 2

4

まず、カテゴリを取得するには...

カテゴリのネストの深さが 2 レベル (親と子) のみである場合、または直接のサブカテゴリのみに関心がある (つまり、サブカテゴリのサブカテゴリではない) 場合、SQL は非常に単純です。

SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid

ネストがより深い場合は、カテゴリのネストまで再帰的にクエリを実行する必要があります。たとえば、自分自身を 3 レベルに制限する場合、次のように SQL でこれを行うことができます。

SELECT cat_id FROM category_table ct1
WHERE cat_id = $catid OR parent_id = $catid
OR parent_id in (SELECT cat_id FROM category_table WHERE parent_id = ct1.cat_id)

同様に、4 レベルの深いネストの場合、SQL をさらに複雑にすることができます。

SELECT cat_id FROM category_table ct1
WHERE cat_id = $catid OR parent_id = $catid
OR parent_id in (SELECT cat_id FROM category_table ct2 WHERE parent_id = ct1.cat_id
                 OR parent_id in
                 (SELECT cat_id FROM category_table ct3 WHERE parent_id = ct2.cat_id))

等々。

入れ子の深さが固定されていない場合は、コードでループを実行する必要があります。

すべてのカテゴリを取得したら、記事をクエリします。したがって、単純な 2 レベルの依存関係の場合、次のようになります。

SELECT * FROM article_table
WHERE cat_id in (SELECT cat_id FROM category_table WHERE cat_id = $catid OR parent_id = $catid)

同様に、3 レベルのネスティングの場合、次のようになります。

SELECT * FROM article_table
WHERE cat_id in
    (SELECT cat_id FROM category_table ct1
     WHERE cat_id = $catid OR parent_id = $catid
     OR parent_id in (SELECT cat_id FROM category_table WHERE parent_id = ct1.cat_id))

等々...

于 2012-09-27T14:50:39.533 に答える
0
select * from category where parent_id=cat_id

ここでは、特定の cat_id に対して、このすべての sub_categories を取得します。

于 2012-09-27T14:48:55.200 に答える