首页 > 解决方案 > Sql匹配多个条件,按最差技能分组用户

问题描述

大家好。

我需要按参与者的 5 个最差技能对他们进行分组,以创建教室

我还需要知道他们生活在世界的不同地区(美洲、欧洲和亚洲)。

我需要在时区彼此不太远的地方混合和匹配它们(美洲与欧洲的一些地区和亚洲与欧洲其他地区)。

我有 160 名参与者,我需要创建12 个教室

参会人员表:


id name country_id
------------------
1 | name  | 8 |
2 | name2 | 3 |
3 | name  | 4 |
4 | name2 | 8 |
and so on....

国家表:


id name 
------------------
1 | Japan      | 
2 | USA        | 
3 | Australia  | 
4 | UK         | 
and so on....

技能


id name
------------------
1 | skill1      | 
2 | skill2      | 
3 | skill3      | 
4 | skill4      | 
and so on....

参与者技能表:


participant_id skill_id
------------------
1 | 2      | 
1 | 4      | 
1 | 3      | 
1 | 5      | 
1 | 9      | 
2 | 1      | 
2 | 4      | 
2 | 3      | 
2 | 6      | 
2 | 9      | 
3 | 2      | 
3 | 7      | 
3 | 8      | 
3 | 5      | 
3 | 9      | 
and so on....

理想情况下,结果会让我得到这样的结果:


group_id participant_id country_id
----------------------------------
1 | 5  | 1  |
1 | 63 | 4  |
1 | 71 | 5  |
1 | 95 | 4  |
1 | 18 | 5  |
1 | 83 | 8  |
1 | 44 | 1  |
1 | 4  | 8  |
1 | 73 | 5  |
1 | 36 | 12 |
1 | 53 | 12 |
1 | 12 | 8  |
1 | 21 | 5  |
1 | 10 | 4  |
2 | 34 | 13 |
2 | 22 | 13 |
2 | 2  | 15 |
and so on...

知道如何让它工作吗?

非常感谢您,祝您编码愉快^^

**更新 我通过运行此 SQL 查询设法选择了 5 个最差的技能:

select p.id, p.name, s.id from `participants` p
left join `regions` r on p.`region_id` = r.`id`
left join `participant_skill` ps on p.`id` = ps.`participant_id`
left join skills s on ps.`skill_id` = s.`id`
where ps.`rank` > 11

现在我不知道如何根据他们最差的技能和地区将参与者匹配在一起。

这是表格的转储。 https://www.db-fiddle.com/f/rqtP5HnoyiwSKiy9Jmx8KV/1

我希望这会有所帮助

;)

标签: phpmysqlsqlarrayslaravel

解决方案


推荐阅读