【问题标题】:How to: one to many to some to many? In PHP如何:一对多对多对多?在 PHP 中
【发布时间】:2011-07-11 15:14:20
【问题描述】:

我正在建立一个在线商店。商店有几个类别(~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 循环中返回子产品详细信息。

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

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

【问题讨论】:

    标签: php mysql database-normalization


    【解决方案1】:

    解决此类问题我通常采取的第一步是尽可能多地normalize the schema。看看你的示例产品,这就是我的想法:

    • 表items:列number,price
    • 表attributes:列id,title
    • 表items_attributes:列item_id,attribute_id,value

    那么,查询数据库时:

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

    我的 MySQL 有点生疏,所以语法可能不是 100% 正确,但希望这能帮助您朝着正确的方向前进。

    编辑:

    正如 cmets 中 rootatwc 所提到的,InnoDB 存储引擎支持外键,它允许您执行 级联 UPDATEs 和 DELETEs 之类的操作,以便您不要以大量孤立数据告终,并施加检查约束以帮助确保您不会获得虚假/超出范围的数据。 Wikipedia 对这些机制有相当不错的解释。

    【讨论】:

    • 此外,使用 InnoDB 引擎和 FOREIGN KEYS 让生活变得更轻松..只是一个旁注;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2012-10-27
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2011-03-08
    相关资源
    最近更新 更多