gpt4 book ai didi

MySQL动态排序

转载 作者:行者123 更新时间:2023-11-29 22:42:39 26 4
gpt4 key购买 nike

一般来说,我所需要做的就是订购一个 MySQL 表。但是,这必须是一个“明智”的命令,我想听听您的意见。

有一个客户

id, name, email, phone, country, language, registration_time

还有另一个表以数值形式保存销售经理的技能 -

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

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

现在,我想按国家/地区、语言和注册时间(按此确切顺序)对特定销售经理的客户表进行排序,其中最上面的行将来自以下国家/地区该销售经理的技能最高,其次是他技能最高的语言,最后是注册时间。

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

最佳答案

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

为了测试查询,我对您的表格做了一些更改,您可以像我在这里所做的那样测试我的解决方案:SQL Fiddle

(1) 您需要 JOIN你的customers表两次 skills表-第一个为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特定销售经理的技能> regTimecustomer 。此查询忽略 customerscountrylanguage销售经理没有技能...您可以通过 LEFT JOIN 来避免这种情况

关于MySQL动态排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com