一般来说,我需要做的就是订购一个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 (按此确切顺序)为特定销售经理订购客户表,其方式是顶行将来自某个国家/地区这个销售经理拥有最高技能,在此之后,他拥有最高技能的语言,然后是注册时间。
你有什么建议吗?最大的问题是这个查询应该尽可能简单易读,因为将来会有修改,我不想处理大量的查询。
答案 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
customers
或country
销售经理没有技能......您可以使用language