SQL创建范围

时间:2013-04-28 23:08:58

标签: mysql sql

我正在尝试为游戏设计一个数据库,我很难理解如何根据范围在玩家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级,依此类推,这是一种可怕的方式。

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

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