MySQL动态订单

时间:2015-03-25 13:12:21

标签: mysql sql

一般来说,我需要做的就是订购一个MySQL表。 但是,它必须是一个聪明的"订单,我想听听你的意见。

有一张customers

的表格
id, name, email, phone, country, language, registration_time

还有另一个表将销售经理的skills作为数值 -

sales_manager_id, skill_type, skill_name, skill_value
               7, language  , English   , 5

这意味着7号经理在5级讲英语。 每个销售经理都可以拥有多种技能。

现在,我想通过国家/地区,语言和registration_time (按此确切顺序)为特定销售经理订购客户表,其方式是顶行将来自某个国家/地区这个销售经理拥有最高技能,在此之后,他拥有最高技能的语言,然后是注册时间。

你有什么建议吗?最大的问题是这个查询应该尽可能简单易读,因为将来会有修改,我不想处理大量的查询。

1 个答案:

答案 0 :(得分:0)

我认为我理解你的问题。如果不是,请纠正我,否则这是我的解决方案。

我对您的表格进行了一些更改以便测试查询,您可以像我在此处一样测试我的解决方案:SQL Fiddle

(1)您需要使用JOIN表格customers skills两次{ - 1}}表格 - 首先是country技能,第二个是language。销售经理的技巧:

select *
from customers
join skills as country_skills on country_skills.skill_name = customers.country
join skills as language_skills on language_skills.skill_name = customers.language

(2)您需要仅为所需的销售经理限制结果,例如销售经理id = 11:

where country_skills.sales_manager_id = 11
and language_skills.sales_manager_id = 11

(3)动态'你想要的订单:

order by country_skills.skill_value desc, language_skills.skill_value desc, regTime desc

这将是我的完整查询:

select *
from customers
join skills as country_skills on country_skills.skill_name = customers.country
join skills as language_skills on language_skills.skill_name = customers.language
where country_skills.sales_manager_id = 11
and language_skills.sales_manager_id = 11
order by country_skills.skill_value desc, language_skills.skill_value desc, regTime desc

因此,您获得的所有customers按特定销售经理的country技能排序>特定销售经理的language技能> regTime的{​​{1}}。 此查询会忽略customer customerscountry销售经理没有技能......您可以使用language

来避免这种情况