【问题标题】:mysql union or join just one querymysql union 或只加入一个查询
【发布时间】:2012-10-11 16:39:22
【问题描述】:

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

我们所有的客户都有价目表,有些客户同时拥有价目表和一份额外的折扣清单。今天我们有大约 25 个不同的价格表和大约 100 个额外的折扣表。 所有价目表的结构都相同;他们有一个价格组和百分比折扣。

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

20

B 35

C 20

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

折扣清单 0013 可能如下所示:

在文章标签中

PL-2344-444 40 (%)

P-0455-23 200 (瑞典克朗)

在类别标签中

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' AND PRICEGROUP = 'F'

我这样调用函数 $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。

非常感谢

最好的问候琳达

【问题讨论】:

    标签: php mysql join mysqli union


    【解决方案1】:

    您可以使用联合进行查询:

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

    【讨论】:

      猜你喜欢
      • 2014-02-13
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2011-04-01
      • 2011-02-26
      • 2012-12-18
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多