【问题标题】:Is there a better way of this MySQL CASE SELECT?这个 MySQL CASE SELECT 有更好的方法吗?
【发布时间】:2010-10-11 14:42:03
【问题描述】:

最后两个参数是 PHP WHERE 和 ORDER 子句,它们(可能)在这里无关紧要。

fornecedores.nome_emp AS nome_fornecedor, exchange_rates1.rate AS rateEUR_USD,
exchange_rates2.rate AS rateEUR_AOA,
CASE produtos.moeda 
WHEN 'AOA' THEN produtos.preco_custo / exchange_rates2.rate 
WHEN 'EUR' THEN produtos.preco_custo 
WHEN 'USD' THEN produtos.preco_custo / exchange_rates1.rate 
END as prc, 

CASE produtos.moeda 
WHEN 'AOA' THEN produtos.preco_venda / exchange_rates2.rate 
WHEN 'EUR' THEN produtos.preco_venda 
WHEN 'USD' THEN produtos.preco_venda / exchange_rates1.rate 
END as pvp 

FROM produtos 
LEFT JOIN fornecedores ON produtos.id_fornecedor = fornecedores.id_fornecedores 
LEFT JOIN exchange_rates AS exchange_rates1 ON exchange_rates1.para = 'USD' 
LEFT JOIN exchange_rates AS exchange_rates2 ON exchange_rates2.para = 'AOA'
$whereClause $orderClause

提前致谢:D

【问题讨论】:

    标签: php mysql select left-join case


    【解决方案1】:

    您在 MySQL 中缺少JOIN 的强大功能。您正在尝试获得两种不同的汇率(通过两个不同的LEFT JOINs 到同一张表),然后使用CASE 来确定要使用哪一个。

    相反,只加入您实际需要的费率!那么你根本不需要任何条件逻辑。

    fornecedores.nome_emp AS nome_fornecedor, exchange_rates.rate, produtos.preco_custo / exchange_rates.rate
    FROM produtos
    LEFT JOIN exchange_rates ON exchange_rates.para = produtos.moeda
    

    这假定exchange_rates 中有一行EUR 的速率设置为1

    【讨论】:

    • 该死的,我真的很担心,但如果我们谈论欧元的话,我就卡住了,我们实际上什么都不做,就这样吧。我的 exchange_rate 表中没有一排欧元……真丢脸……谢谢 VoteyDisciple
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 2011-04-08
    • 2013-05-03
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多