如果我有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
和另一个表格JOBS_PREFS
有类似的内容:
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逻辑以获得最终成本&#34;)< / p>
如何引用JOBS_PREFS.rate_a列中的值,例如,基于值&#34; rate_a&#34;在JOBS表中为该作业ID存储?基本上,JOBS表中的VALUE列指示了我从中取出JOBS_PREFS数据的NAME列。
有道理吗?
可行?
答案 0 :(得分:2)
这样的事可能适合你:
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