gpt4 book ai didi

php - 技能依赖的Mysql技术

转载 作者:可可西里 更新时间:2023-11-01 07:37:46 25 4
gpt4 key购买 nike

我有一个关于存储依赖关系的数据库技术的问题。我知道那里有很多,但我不能轻易地将它们放在我需要的方案中。我创建了简单的图像:

Skills example

如您所见,我需要创建一个相互依赖的技能树(就像在游戏中一样)。因此,例如,如果有人想要拥有技能 8,我可以告诉他他需要先拥有技能 1、2 和 5。

这可能适用于数据库中的历史数据,但我不太清楚如何动态地执行此模型。我遇到的问题是,技能将一直添加到树中所有可能的位置。没完没了。可以在任何级别添加技能。

现在,在第一个问题之后,还有一个更复杂的问题。我也需要有水平的技能。因此,例如技能 1 可以有 10 个等级。并且只有在技能 1 达到 5 级后才能达到技能 2。

对于玩魔兽世界之类的游戏的人来说应该是可以理解的。

注意一点,技能可以随时添加,添加后不能更改。在正常基础上。以防万一一些技能会非常糟糕或类似的东西,然后它会被删除,但这种情况很少发生。

感谢您提供建议、链接或任何其他 Material !

最佳答案

我有足够的挑战来解决这个问题,但我没有足够的挑战来解决 MySQL 中的问题。考虑到这一点,这是您的问题的 Postgresql 版本:

with recursive 
skill_list(skill_id) as
(
select distinct skill_id from skill_req
where req is not null
union
select distinct req from skill_req
where req is not null
)
,skill_tree(skill_group, depend_on) as
(
select skill_id, skill_id -- seeds
from skill_list
union
select st.skill_group, sr.req
from skill_req sr
join skill_tree st
on sr.skill_id = st.depend_on
)
,skills_required as
(
select skill_group, depend_on
from skill_tree
where skill_group <> depend_on -- remove seeds
)
select
sl.skill_id,
array_agg(sr.depend_on order by depend_on) as array_version,
array_to_string(array_agg(sr.depend_on order by depend_on), ',')
as group_concat_version
from skill_list sl
left join skills_required sr on sr.skill_group = sl.skill_id
group by sl.skill_id

数据:

CREATE TABLE skill_req
(skill_id int, req int);

INSERT INTO skill_req
(skill_id, req)
VALUES
(2, 1),

(4, 3),

(5, 1),

(6, 4),
(6, 2),

(7, 6),
(7, 9),

(8, 2),
(8, 5),

(9, 3),

(10, 4),
(10, 5),
(10, 9);

输出:

 skill_id | array_version | group_concat_version 
----------+---------------+----------------------
1 | {NULL} |
2 | {1} | 1
3 | {NULL} |
4 | {3} | 3
5 | {1} | 1
6 | {1,2,3,4} | 1,2,3,4
7 | {1,2,3,4,6,9} | 1,2,3,4,6,9
8 | {1,2,5} | 1,2,5
9 | {3} | 3
10 | {1,3,4,5,9} | 1,3,4,5,9
(10 rows)

现场测试:http://www.sqlfiddle.com/#!1/77894/1

关于php - 技能依赖的Mysql技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424047/

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