2012-03-13 4 views
1

私はMySQLで新しいデータベースを構築し、最初から正しい目的を持ちたいと思っています。私はアイテムを持つテーブルを持っており、これらをカテゴリ別に並べ替えたいと思っています。私の問題は、カテゴリを動的にしたいということです。データベース内のアイテムの動的カテゴリに適したソリューション

私はこのような何かそれを構築したいカテゴリを知っているだろう場合:

項目テーブル
ID
category1_id
category2_id
タイトル

商品区分テーブルを
id
タイトル

categories2テーブル
ID
タイトル

しかし、再び、私はオンザフライ喜ばとしてそこにできるだけ多くの異なるカテゴリーを置くことができるようにしたい、とまた、私は条件と注文の中で私のquerysでこれらの異なるカテゴリを扱うことができるようにしたいと思います。これも可能ですか、私はデータベース内のカテゴリを確実にする必要がありますか?

答えて

5

を:

fields: 
      itemId (PK) 
      itemName 
      etc.. 

(2)tblカテゴリ:

fields: 
      categoryId (PK) 
      categoryName 
      etc.. 

(3)tblItemCategory:

fields: 
      itemId (FK) 
      categoryId (FK) 
+0

私はカテゴリグループを処理するための第4テーブルを追加したこと@Sevakいただきありがとうございます。 (FK)と(PK)btwとは何ですか? – MotoX

+1

PK =主キー。 FK =外部キー(=参照先テーブルの主キー)。 – dgw

+0

yeah @dgwは正しいです... –

0

最良の方法は、多対多の関係

tahatのようなものを使用することである。そのための3つのテーブルを作成します....

(1)tblItem

**items** 
id 
title 

**categories** 
id 
title 

**items_categories** 
item_id 
category_id 
1

Iは、単一の「カテゴリ」テーブルを使用して、テーブル内の他のカテゴリを参照するparent_idフィールドを有するのファンです。

これにより、スレッド化されたカテゴリをすべて1つのテーブルにまとめることができます。「カテゴリグループ」は、parent_idフィールドにデータを持たないカテゴリ行です。

例データは

id name   parent_id category_count 
1  appliances null   1 
2  dogs   null   1 
3  couch   1   0 
4  pitbull  2   0 
5  games   null   0 
//... 

基本的には、 'カテゴリー' はそれ自体に関連している - こちらのモデル団体です: (参照:CakePHP book3rd code example here

class Category extends AppModel { 

    public $belongsTo = array(
     'Parent' => array(
      'className' => 'Category', 
      'foreignKey' => 'parent_id', 
      'counterCache' => true 
     ) 
    ); 

    public $hasMany = array(
     'Children' => array(
      'className' => 'Category', 
      'foreignKey' => 'parent_id' 
     ) 
    ); 

    //... 
} 

class Item extends AppModel { 

    public $belongsTo = array('Category'); 

    //... 

} 

またItem hasAndBelongsToMany Categoryを行うことができますbelongsToの代わりに、あなたの設定によります。


追加情報:

CounterCache:CakePHPのcounterCache、go hereの詳細については

検索 - >スレッド:このメソッドを使用して、あなたは簡単経由して、ネストされたデータを取得することができますCakePHPの検索 - >スレッド(click here for more info about this

+0

しかし、このようにして、私はcategory_groupの権利でグループ化の可能性を失う?私が 'fields' => 'COUNT(Category.id)AS category_count'、 'group' => 'CategoryGroup.id'のようにしたいのですが。 – MotoX

+0

あなたを制限するだけでなく、実際にCakePHPに組み込まれていることを話しています。私は上記の答えを 'counterCache'をインクルードするように編集しました。これは、特定のカテゴリに属する​​カテゴリの数を自動的に保持します。だから... '犬'に別のカテゴリを追加すると、 '犬'の行の 'category_count'フィールドが増分されます。それは何かが削除されるといつでも番号を更新します...基本的に、それはあなたのためにすべての世話をします。 – Dave

+0

私はCakePHPの 'find-> threaded'への情報とリンクを少し追加しました。 – Dave

関連する問題