这种MySQL CASE SELECT有更好的方法吗?

时间:2010-10-11 14:42:04

标签: php mysql select left-join case

最后两个参数是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

1 个答案:

答案 0 :(得分:0)

你错过了MySQL中JOIN的强大功能。您试图获得两种不同的汇率(通过两个不同的LEFT JOIN到同一个表格),然后使用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的{​​{1}}中有一行的费率设置为EUR