0

我正在尝试为游戏设计一个数据库,但对于如何根据一个范围在数据库中的玩家经验和关卡之间建立联系,我感到很困惑。像 1 级是 0 xp,2 级需要 200 经验,3 需要 400,4 需要 800 等等,我希望能够从一个查询中去“玩家有 54234 经验。他是 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 级,依此类推,这是一种可怕的方法。

4

2 回答 2

0

使用现有架构,您可以执行以下操作:

SELECT   Hero.hero, MAX(Level.level)
FROM     Level JOIN Hero ON Hero.totalExpEarned >= Level.level
GROUP BY Hero.hero
于 2013-04-28T23:14:41.160 回答
0

将范围作为两列放入您的级别表中,经验的最小值和最大值。我的示例中的最大值是排他性的,而最小值是包含性的。

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

这种方法允许您查找每个级别只有一行的级别,但您必须修改您的架构。

于 2013-04-28T23:14:57.673 回答