0

我有一个产品类,当实例化时,它从“产品”表中获取数据,它还在其中创建一个“类别”对象(产品-> 类别),该对象从类别表中获取数据。我的问题是,当列出来自同一类别的多个产品时会发生什么,为了创建类别对象进行多个相等的查询,因为它们来自同一类别。如何解决这个问题?

4

4 回答 4

2

在 SQL 中使用 JOIN:

SELECT *
FROM product
LEFT JOIN category ON product.category_id = category.id;
于 2012-05-10T08:14:42.200 回答
2

您必须构建一个拦截和/或缓存查询的层。当它看到您正在请求具有特定 ID 的类别时,它应该从其缓存中显示该类别,如果它不存在,它应该检索然后缓存它,因此在请求期间不会查询同一行不止一次。

手动执行此操作是行不通的,只需选择一个体面的ORM即可为您执行此操作。

于 2012-05-10T08:18:12.777 回答
1

使用创建对象的工厂,并为要在构造函数中传递的产品/类别的数据提供选项。工厂加载将列出的所有产品的数据,然后实例化产品对象,提供已经获取的数据

于 2012-05-10T08:17:31.217 回答
0

在循环内部执行 sql 查询不是一个好习惯。

您可以做的是将产品表与类别表左连接。

$select = SELECT *
FROM product
LEFT JOIN category ON product.category_id = category.id;

然后执行查询,然后将您的产品分类为类别基础,就像您可以运行循环一样

$result = mysql_query($select);
while($data = mysql_fetch_assoc($result)){

   $product_info['product_name'] = $data['product_name'];
   $product_info['price'] = $data['product_price'];

   $product[$data['category']][$data['product_id']] = $product_info;
}

这个循环将发挥神奇作用,它可以帮助您对属于同一类别的产品进行分类。您可以以更有效的方式显示您的数据。

于 2012-05-10T08:28:11.063 回答