我正在尝试为游戏设计一个数据库,我很难理解如何根据范围在玩家exp和数据库中的级别之间建立链接。像1级的东西是0 xp,级别2需要200 exp,3需要400,4需要800等等我希望能够去“玩家有54234 exp。他的等级23”来自查询不内置转换。
在我见过的每个例子中(在类似的年级比例示例中),他们有一个学生被分配了一个等级A和他们完全跳过这样一个事实,即学生得到了92,可以表示为A.使用学生成绩数据库的人如何从“他的平均得分是73.9”到“他得到了C”?
表格的简化版本
CREATE TABLE Hero
(
hero INT NOT NULL,
totalExpEarned INT NOT NULL,
...
PRIMARY KEY(hero)
);
CREATE TABLE Level
(
level INT NOT NULL,
...
PRIMARY KEY(level)
)
我能想到的最简单的方法就是查找表,其中0-199级别为1级,200-399级别为2级,依此类推,这是一种可怕的方式。
答案 0 :(得分:0)
使用现有架构,您可以执行以下操作:
SELECT Hero.hero, MAX(Level.level)
FROM Level JOIN Hero ON Hero.totalExpEarned >= Level.level
GROUP BY Hero.hero
答案 1 :(得分:0)
将范围作为两列放入您的级别表,最小和最大体验。我的例子中的最大值是独占的,而min是包含的。
CREATE TABLE Level
(
level INT NOT NULL,
minExp INT NOT NULL,
maxExp INT NOT NULL
...
PRIMARY KEY(level)
)
然后你可以加入Level和Hero:
SELECT hero, totalExpEarned
FROM Hero
INNER JOIN Level ON Hero.totalExpEarned >= Level.minExp
AND Hero.totalExpEarned < Level.maxExp
级别设置如下:
Level 1: minExp=0, maxExp=200
Level 2: minExp=200, maxExp=400
Level 3: minExp=400, maxExp=800
此方法允许您在每个级别只查找一行的级别,但您必须修改架构。