1

オンラインストアを構築しています。ストアには複数のカテゴリ (~10) があり、カテゴリには複数の製品 (それぞれ~10) があり、製品には多くのサブ製品 (それぞれ 20 以上) があります。

これは私が立ち往生している部分です:

サブ製品には、詳細の列がいくつかあります。製品には 10 個のヘッダーもあります。

これは製品の外観です。

http://www.ampedwebdesign.com/bear/new2/public/products/images/straightpins.jpg

ヘッダーは背景が暗いセルで、サブプロダクトは行です。

これは私のヘッダークラ​​スの一部です:

class Header extends DatabaseObject {

  protected static $table_name="headers";
  protected static $db_fields=array('id', 'product_id', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7', 'col8', 'col9', 'col0', 'col1', 'col2');

  public $id;
  public $product_id;
  public $col1;
  public $col2;
  public $col3;
  public $col4;
  public $col5;
  public $col6;
  public $col7;
  public $col8;
  public $col9;
  public $col10;
  public $col11;
  public $col12;

商品ビューは商品クラスを呼び出して画像を表示します。次に、製品ビューはヘッダー クラスを呼び出して、product_id によってヘッダーを返します。次に、製品ビューはサブ製品クラスを呼び出して、product_id によってサブ製品を返します。次に、製品ビューはサブ製品クラスを呼び出して、サブ製品の詳細を foreach ループで返します。

より良い方法があることがわかっている場合、このようなコードを書くのは嫌いです。私はそれを見つける方法がわかりません。

My DB テーブル: 製品、サブ製品、カテゴリ、ヘッダー

4

1 に答える 1

3

このような問題を解決するために私が通常行う最初のステップは、スキーマを可能な限り正規化することです。あなたのサンプル製品を見て、これは私に飛び出すものです:

  • items:列numberprice
  • attributes:列idtitle
  • 表:items_attributesitem_id、、attribute_idvalue

次に、データベースにクエリを実行する場合:

   SELECT title, value
     FROM items_attributes
    WHERE item_id = 123
LEFT JOIN attributes
          ON items_attributes.attribute_id = attributes.id;

私のMySQLは少し錆びているので、構文が100%正しくない可能性がありますが、これが正しい方向に役立つことを願っています。

編集:

コメントでrootatwcが述べているように、InnoDBストレージエンジンは外部キーをサポートしているため、カスケードUPDATEやカスケードなどDELETEの処理を実行して、大量の孤立したデータが発生しないようにしたり、チェック制約を課したりすることができます。偽の/範囲外のデータを取得しないようにしてください。ウィキペディアには、これらのメカニズムについてかなり適切な説明があります。

于 2011-07-11T15:28:08.920 に答える