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 に答える