【问题标题】:join two tables based on priority and union根据优先级和联合连接两个表
【发布时间】:2015-08-23 23:58:00
【问题描述】:

我被困住了,希望有人可以帮助我。我想加入下面的两个查询,但我不知道如何。

每篇文章都应附有折扣。折扣可以基于文章代码、品牌、类别或字母,并且查询应仅显示每篇文章的一个折扣价格或百分比。

这可能吗?

折扣表

(SELECT type, dicountprice, percentage, 1 priority FROM discount_table
WHERE code = 'artcode' AND discountcode = '11')
union
(SELECT type, dicountprice, percentage, 2 priority FROM discount_table
WHERE code = 'brand' AND discountcode = '11')
union
(SELECT type, dicountprice, percentage, 3 priority FROM discount_table
WHERE code = 'category' AND discountcode = '11')
union
(SELECT type, dicountprice, percentage, 4 priority FROM discount_table
WHERE code = 'letter' AND discountcode = '11')
ORDER BY priority DESC

产品表

 SELECT artkod, price, image FROM product_table

一个例子

折扣表 编号 |折扣码 |价格水平 |代码 |类型 |折扣价 |百分比 -------------------------------------------------- ------------------------------------------- 1 | 11 | 1 | acd-re|百分比 | | 30 2 | 11 | 2 |惠普 |百分比 | | 10 3 | 11 | 4 | D |美元 | 200 | 产品表 编号 | artkod |字母代码 |品牌 |价格 |图片 -------------------------------------------------- -------------- 1 | acd-re | D |三星 | 300 |没有图像 2 | qdpoll123 | C |惠普 | 40 |没有图像 3 |添加-345-v | D |三星 | 600 |没有图像 应该导致 行 acd-re | 300 | 30% qdpoll123 | 40 | 10% 添加-345-v | 600 | 200 美元

非常感谢 琳达

【问题讨论】:

  • 您能否提供一些示例输入和预期输出?

标签: php join mysqli


【解决方案1】:

我不确定我已完全理解您的两个表之间的联系。但如果它是 1:1 的关系,那么下面应该做的工作:

select 
    d.code,
    p.price,
    IF(d.discountprice is null,
        concat(d.percentage, ' %'),
        concat(d.discountprice, ' $')) as discount,
    case d.code
        when p.artkod then 1
        when p.brand then 2
        when p.lettercode then 3
    end as priority
from
    product as p
        left join
    discount as d ON d.id = p.id
order by priority desc

这是它所提供的:

code   price discount priority
D      600   200 $    3
hp     40    10 %     2
acd-re 300   30 %     1

我认为您应该考虑创建一个表来引用具有相关规则的不同折扣类型。使用索引将使您获得资源。特别是如果您有很多记录要处理。

或者,如果您不能真正修改架构,也许您可​​以只在 artkod、品牌和字母代码上放置索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2015-05-04
    • 2011-01-31
    相关资源
    最近更新 更多