0

PHPでスクリプトを作成し、MsSQLデータベースを使用しています。

私のスクリプトは、製品IDのリストをループします。IDごとに、製品データのオブジェクトを作成します。製品オブジェクト内の「postage」フィールドについて、別のクエリを実行するpostageクラスを呼び出します。

$products = $productsObj->getProducts($i, $limit);

foreach($products as $product)
{

echo $product['productName'] . '|';
echo $product['productDescription'] . '|';
echo $product['productPrice'] . '|';

$postage = $postageObj->getPostageCostforProduct(1, $product['weight'], $product['productPrice']);

echo $postage . '|';

}

製品がたくさんある場合は、「テーブル変数」を使用してこのプロセスを高速化できる可能性があると言われています。しかし、私はこれがどのように役立つのか、そしてこれをどのように実装するのかを理解するのに苦労しています。postageクラスの既存のpostageクエリをテーブル変数クエリに置き換えますか?もしそうなら、これは正確にどのように機能し、サーバーのロードに役立ちますか?

編集

製品IDのリストを取得するためのクエリは次のとおりです。

SELECT * FROM  FROM products WHERE category='$this->cat'

次に、それらのそれぞれをループして、各製品の作成とオブジェクト化を行います。オブジェクトの製品データを取得するためのクエリは次のとおりです。

SELECT  p.id as prod_id, * FROM products AS p WITH(NOLOCK)
WHERE (p.id = '$this->prod_id')

データを表示するとき、私は郵便料金を取得するために次のクエリを呼び出します。

SELECT Postage.postageName, Postage.Description AS postagedesc, Postage.id, Postage.qtyPer, Postage.pricePer, Postage.groupID, Groups.country_filter FROM  Postage 
LEFT OUTER JOIN Groups ON Postage.groupID = Groups.id 
WHERE  (Postage.minimumQty <= '$qty') AND (PostageRules.maximumQty >= '$qty') 
 (Postage.minPrice <= '$price') AND (Postage.maxPrice >= '$price') 
4

1 に答える 1

1

次の外部結合を使用して、単一のクエリで商品とその送料の値を取得できますPostage

SELECT
  pr.productName,
  pr.productDescription,
  pr.productPrice,
  pr.productWeight,
  po.postageName,
  po.Description AS postagedesc,
  po.id,
  po.qtyPer,
  po.pricePer,
  po.groupID,
  gr.country_filter
FROM products AS pr
  LEFT JOIN Postage AS po
    ON po.minimumQty <= pr.productWeight
   AND po.maximumQty >= pr.productWeight
   AND po.minPrice   <= pr.productPrice
   AND po.maxPrice   >= pr.productPrice
  LEFT JOIN Groups  AS gr
    ON po.groupID = gr.id
WHERE pr.category = '$this->cat'

このクエリは、productsObj(たとえばgetProductsWithPostageCosts)で別の名前で定義し、おそらく次のように使用できます。

$products = $productsObj->getProductsWithPostageCosts($i, $limit);

foreach($products as $product)
{

echo $product['productName'] . '|';
echo $product['productDescription'] . '|';
echo $product['productPrice'] . '|';
echo $product['postageName'] . '|';
echo $product['postagedesc'] . '|';
...
echo $product['country_filter'] . '|';

}
于 2012-08-31T19:08:42.090 に答える