2

顧客が持っている価格表または価格表/割引リストに応じて、Webショップで各記事の価格の割引を取得するためのより良い方法を見つける必要があります。これは、今日の5つのクエリではなく、1つのクエリで実行できると思いますが、どこから始めればよいのか本当にわかりません。

すべてのお客様には価格表があり、一部のお客様には価格表と1つの追加割引リストの両方があります。現在、約25の異なる価格表と約100の追加割引リストがあります。すべての価格表は同じ方法で構成されています。価格グループとパーセント単位の割引があります。

たとえば、価格表01は次のようになります。

20

B 35

C 20

追加割引リストは別の方法で構成されており、固定価格またはパーセンテージにすることができます。また、3つの異なる優先度レベルがあります。商品コードに基づく割引(優先度1)、カテゴリに基づく割引(優先度2)、および価格グループに基づく割引(優先度3)です。

割引リスト0013は次のようになります。

記事タブ

PL-2344-444 40(%)

P-0455-23 200(SEK)

カテゴリタブ

C12 50(%)

N12 35(%)

今日、割引リストでヒットするかどうかを確認するために、3つの異なるクエリがあります。

まず、優先度1でヒットするかどうかを確認します(FIXEDはfとPERCENTAGE rを返します)

SELECT DISCOUNT, FIXED, PERCENTAGE FROM PUPRIREG 
WHERE ARTCODE = 'JO-23455' AND DISCOUNTLIST = '0013'

上記が0を返した場合、2番目のクエリである優先度2を実行します。

SELECT DISCOUNT, FIXED, PERCENTAGE FROM PUPRIREG 
WHERE CATEGORY = 'C15' AND DISCOUNTLIST = '0013'

そして最後の優先順位3:

SELECT DISCOUNT, FIXED, PERCENTAGE FROM PUPRIREG 
WHERE PRICEGROUP = 'F' AND DISCOUNTLIST = '0013'

追加の割引リストのいずれも0を返さない場合、価格リストから割引を取得します

PRICELIST ='01'およびPRICEGROUP='F'のPUPRIREGから割引を選択

次のような関数を呼び出します$discount= discount($ articlecode、$ category、$ pricegroup);

function discount($articlecode, $category, $pricegroup){

$articlecode = sanitizingData($articlecode); 

$category = sanitizingData($category);

$pricegroup = sanitizingData($pricegroup);

// do priority 1

// prio 2

// prio 3

// pricelist

return $discount;

}

誰かがこれを行う方法を教えてくれたらとても嬉しいです。私はmysqliとphpを使用しています。

どうもありがとう

よろしくリンダ

4

1 に答える 1

0

ユニオンを使用してクエリを実行できます。

(SELECT DISCOUNT, FIXED, PERCENTAGE, 1 priority FROM PUPRIREG 
    WHERE ARTCODE = 'JO-23455' AND DISCOUNTLIST = '0013')
union
(SELECT DISCOUNT, FIXED, PERCENTAGE, 2 priority FROM PUPRIREG 
    WHERE CATEGORY = 'C15' AND DISCOUNTLIST = '0013')
union
(SELECT DISCOUNT, FIXED, PERCENTAGE, 3 priority FROM PUPRIREG 
    WHERE PRICEGROUP = 'F' AND DISCOUNTLIST = '0013')
union
(SELECT DISCOUNT, 0 fixed, 0 percentage, 4 priority FROM PUPRIREG
    WHERE PRICELIST = '01' AND PRICEGROUP = 'F')
order by priority;

追加の人工priority列と注文により、割引が適切に並べ替えられます。

于 2012-10-21T20:38:58.753 に答える