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 循环中返回子产品详细信息。

任何帮助将不胜感激,当我知道有更好的方法时,我讨厌编写这样的代码。我只是不知道如何找到它。

我的数据库表:产品、子产品、类别、标题

4

1 回答 1

3

在解决此类问题时,我通常采取的第一步是尽可能地规范化模式。看看你的示例产品,这就是我的想法:

  • items:列numberprice
  • attributes:列idtitle
  • items_attributes:列item_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 存储引擎支持外键,它允许您执行cascadeUPDATEDELETEs之类的操作,这样您就不会得到大量孤立数据,并施加检查约束以提供帮助确保您不会获得虚假/超出范围的数据。维基百科对这些机制有相当不错的解释。

于 2011-07-11T15:28:08.920 回答