mysql联合或只加入一个查询

时间:2012-10-21 20:19:11

标签: php mysql join mysqli union

我需要找到一种更好的方法来获取网店中每个商品价格的折扣,具体取决于客户的价目表或价格表/折扣清单。我认为这可以只用一个查询而不是今天的5个查询,但我真的不知道从哪里开始。

我们所有的客户都有一个价格表,有些还有价格表和一个额外的折扣清单。今天我们有大约25种不同的价格表和大约100种额外的折扣清单。 所有的价格表都是以同样的方式构建的;他们有价格组和折扣百分比。

例如价格表01可能看起来像

A 20

B 35

C 20

额外折扣清单以不同方式构成,可以具有固定价格或百分比。它还有三个不同的优先级:基于商品代码的折扣(优先级为1),基于类别(优先级为2)和基于价格组(优先级为3)。

折扣列表0013可能如下所示:

在文章标签

PL-2344-444 40(%)

P-0455-23 200(SEK)

在类别标签

C12 50(%)

N12 35(%)

今天我有三个不同的查询,看看我是否在折扣列表中获得了点击:

首先,我检查一下我是否获得优先级为1的命中:( FIXED返回f和PERCENTAGE r)

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

如果以上返回0,我执行第二个查询,优先级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,我会从价目表中获得折扣

从PUPRIREG中选择折扣,其中PRICELIST ='01'且PRICEGROUP ='F'

我将函数调用如下 $ 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。

非常感谢

最好的问候linda

1 个答案:

答案 0 :(得分:0)

您可以使用union进行查询:

(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列和订单确保您获得正确排序的折扣。