如果我有具有这些值的JOBS
,假设:
id|rate_type|hours|is_hourly
1|rate_a|2|1
2|rate_b|1|1
3|rate_a|3|1
4|rate_c|1|0
另一个表CCD_ 2有这样的东西:
id|rate_a|rate_b|rate_c
1|50|60|70
2|60|60|70
3|50|50|75
基本上,一个表列出了用户可以指定的自定义作业的3种不同费率(因此他们不必每次都声明自定义费率),另一个表则列出了他们的所有作业,并引用了这3种自定义费率中的哪一种应用于每个作业。
我该如何编写一个直接从mySQL返回HOURS*RATE_TYPE的查询,而不必编写PHP逻辑。
类似这样的东西:
SELECT *,
CASE WHEN JOBS.is_hourly > 0
THEN JOBS.hours * JOBS_PREFS.JOBS.rate_type
ELSE JOBS_PREFS.JOBS.rate_type
END cost
FROM ...
不要担心这一切背后的逻辑和表设计,因为这是我正在处理的简化版本,不,规范化表不是我想要的——这是在一个小数据库上进行的一个小定制,它会简化一些事情(除非查询本身的生成时间比我在其上运行PHP逻辑要长得多,最终才能获得"成本")。
如何引用JOBS_PREFS.rate_a列中的值,例如,基于JOBS表中为该作业ID存储的值"rate_a"?基本上,JOBS表中的VALUE列指定了从JOBS_PREFS中提取数据的列NAME。
有道理吗?
可以吗?
这样的东西可能对你有用:
http://sqlfiddle.com/#!9/19eb5/5
select
id, rate_type, hours, hourly,
(select
case j.rate_type
when 'rate_a' then p.rate_a
when 'rate_b' then p.rate_b
when 'rate_c' then p.rate_c
else 0
end * (case when hourly >= 1 then j.hours else 1 end)
from job_prefs p
where p.id = j.id
limit 1) money
from
jobs j