开发者

MySQL evaluating results

开发者 https://www.devze.com 2023-02-18 00:57 出处:网络
I have a funny MySQL query that needs to pull a subquery from another table, I\'m wondering if this is even possible to get mysql to evaluate the subquery.

I have a funny MySQL query that needs to pull a subquery from another table, I'm wondering if this is even possible to get mysql to evaluate the subquery.

example: (I had to replace some brackets with 'gte' & 'lte' cause they were screwing up the post format)


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;

So when the IF statement is not = '1' then the (a.formulae) is the value in the nas_alloys table which is:

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

Basically I want this query to run as:


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;

When a.id != '1', btw, there are about 30 different possibilities for a.formulae, and they change frequently, so hard banging in multiple if statements is not really an option. [redesigning the business开发者_Go百科 logic is more likely than that!]

Anyway, any thoughts? Will this even work?

-thanks -sean


Create a Stored Function to compute that value for you, and pass the params you will decide later on. When your business logic changes, you just have to update the Stored Function.

0

精彩评论

暂无评论...
验证码 换一张
取 消