我正在建立一个在线商店。该商店有几个类别(~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;
产品视图调用产品类来显示图像。然后,产品视图调用header类以按product_id返回标头。然后,产品视图调用子产品类以按product_id返回子产品。然后,产品视图调用子产品类以在foreach循环中返回子产品详细信息。
任何帮助都会受到赞赏,当我知道有更好的方法时,我讨厌编写这样的代码。我只是不知道如何找到它。
我的数据库表:产品,子产品,类别,标题
答案 0 :(得分:3)
我通常会在解决这样的问题时采取的第一步是尽可能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%正确,但希望这会帮助您朝着正确的方向前进。
修改强>
正如rootatwc在评论中所提到的,InnoDB存储引擎支持外键,允许您执行级联UPDATE
和DELETE
s < / strong>这样您就不会收到大量的孤立数据,并强制执行检查约束,以确保您不会获得虚假/超出范围的数据。 Wikipedia对这些机制有一个相当不错的解释。