根据mySQL中另一个表中的VALUE从一个表中选择COLUMN名称?

时间:2016-04-11 20:00:40

标签: mysql mysqli

如果我有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列。

有道理吗?

可行?

1 个答案:

答案 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