2010-10-11 81 views
1

最后两个参数是PHP WHERE和ORDER子句,它们(可能)在这里不重要。有没有这种MySQL CASE SELECT的更好的方法?

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

回答

0

你缺少MySQL中的JOIN的力量。您试图获得两种不同的汇率(通过两个不同的LEFT JOIN s到同一张表),然后使用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 

这假定有一个为EURexchange_rates一排具有设置为1率。

+0

该死的,我实际上就是这么想的,但是如果我们在谈论欧元,我们实际上什么都不做也不管。我的exchange_rate表没有一排欧元......对我感到羞耻......感谢VoteyDisciple – eduardev 2010-10-11 15:40:47

相关问题