MySQL оценивает результаты - PullRequest
0 голосов
/ 17 марта 2011

У меня есть забавный запрос MySQL, который должен извлечь подзапрос из другой таблицы, мне интересно, возможно ли вообще получить mysql для оценки подзапроса.

пример: (мне пришлось заменить несколькоскобки с «gte» и «lte», потому что они испортили формат записи)


select a.id,a.alloyname,a.label,a.symbol, g.grade,
    if(a.id = 1,(
        (((select avg(cost/2204.6) as averageCost from nas_cost where cost != '0' and `date` lte '2011-03-01' and `date` gte '2011-03-31') - t.value) * (astm.astm/100) * 1.2)
    ),(a.formulae)) as thisValue
from nas_alloys a 
left join nas_triggers t on t.alloyid = a.id
left join nas_astm astm on astm.alloyid = a.id
left join nas_estimatedprice ep on ep.alloyid = a.id
left join nas_grades g on g.id = astm.gradeid
where a.id = '1' or a.id = '2'
order by g.grade;

Так, когда оператор IF не равен = 1, тогда (a.formulae) является значением вТаблица nas_alloys:

((ep.estPrice - t.value) * (astm.astm/100) * 0.012)

По сути, я хочу, чтобы этот запрос выполнялся как:


select a.id,a.alloyname,a.label,a.symbol, g.grade,
    if(a.id = 1,(
        (((select avg(cost/2204.6) as averageCost from nas_cost where cost != '0' and `date` gte '2011-03-01' and `date` lte '2011-03-31') - t.value) * (astm.astm/100) * 1.2)
    ),((ep.estPrice - t.value) * (astm.astm/100) * 0.012)) as thisValue
from nas_alloys a 
left join nas_triggers t on t.alloyid = a.id
left join nas_astm astm on astm.alloyid = a.id
left join nas_estimatedprice ep on ep.alloyid = a.id
left join nas_grades g on g.id = astm.gradeid
where a.id = '1' or a.id = '2'
order by g.grade;

Когда a.id! = '1', кстати, существует около 30 различных возможностейдля a.formulae, и они часто меняются, так что жесткие удары по множеству, если операторы на самом деле не вариант.[переработка бизнес-логики более вероятна, чем это!]

В любом случае, есть мысли?Будет ли это вообще работать?

- спасибо -sean

1 Ответ

0 голосов
/ 17 марта 2011

Создайте хранимую функцию, чтобы вычислить это значение для вас, и передать параметры, которые вы определите позже. Когда ваша бизнес-логика меняется, вам просто нужно обновить сохраненную функцию.

...