Есть ли лучший способ для этого MySQL CASE SELECT? - PullRequest
1 голос
/ 11 октября 2010

Последние два параметра - это предложения 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 голосов
/ 11 октября 2010

Вам не хватает силы JOIN в MySQL. Вы пытаетесь получить два разных обменных курса (через два разных 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

Предполагается, что в exchange_rates есть строка для EUR, для которой установлена ​​скорость 1.

...