我是 MySQL 语法的初学者。所以有几个问题我想问。
我有一个线索数据库,用户可以在其中添加线索。并有一个选择一系列数字来执行随机功能的网络方法。(为了游戏是随机的,一遍又一遍地做同样的线索没有意义吗?)
但我现在的主要问题是,如果作者决定添加更多线索怎么办? 那么我的线索数据库将看起来像这样。
+--------+-------------+-----------+--------+
| cID | clueDetails | location | author |
+--------+-------------+-----------+--------+
| 1 | abcde | loc 1 | auth 1 |
| 2 | efghi | loc 1 | auth 1 |
| 3 | jklmno | loc 2 | auth 1 |
| 4 | pqrstu | loc 2 | auth 1 |
| 5 | vwxyz | loc 1 | auth 1 |
+--------+-------------+-----------+--------+
如果玩家选择loc
1 auth 1
,它将显示cID 1,2 and 5
。所以我无法有效地使用我的随机函数,因为它选择了 loc 和 auth 的第一个和最后一个,而 3 和 4 不适合。我现在知道它非常模糊,因为信息稀缺。而要真正了解整个过程,直接到游戏,以及我拥有的方法/功能。(会很长)
切入正题,我的结果将如下所示,识别它的方法将是通过 cID,但如果线索以不同的顺序添加(如上所示),那么我的函数将变得相当糟糕。
编辑:假设这个随机函数给我 2 条线索,因为我想玩 2 条线索。这个随机函数返回 1 和 3。所以从下表结果中,1 和 3 将返回 cID1 和 cID5,因为它们是第 1 行和第 3 行。(抱歉造成的混乱)
+--------+-------------+-----------+--------+
| cID | clueDetails | location | author |
+--------+-------------+-----------+--------+
| 1 | abcde | loc 1 | auth 1 |
| 2 | efghi | loc 1 | auth 1 |
| 5 | vwxyz | loc 1 | auth 1 |
+--------+-------------+-----------+--------+
因此,我想问一下我们是否可以按行数选择行?例如row[3] = cID 5, vwxyz, loc 1, auth 1
。
就我而言,我已经进行了大量研究,MySQL 中似乎没有任何功能允许我们按行号进行选择。(虽然所有文章都过时了,2010 年及之前。不确定 MySQL 是否添加了任何新功能)
我看到了一个 SO 线程 - MySQL - Get row number on select,从我的看法来看,它似乎正在生成一个名为排名的字段。
我想知道的是,这个字段是ranking
临时的还是永久的?因为如果它只是一个临时字段,那么我可以将标识符从 cID 转移到这个编号。
或者你们有什么建议可以解决这个问题吗?我想清除数据库,然后重新创建数据库,但这会花费太多时间。随着时间的推移,当数据库变大时,它也会变慢。另一种方法是制作一个数据表来填充 loc=?loc 和 auth=?auth 的所有当前线索,并使用新线索(最新)再次添加它们,但我认为这会导致 cID 蓬勃发展并飞到一个非常快的速度。而且我担心这会导致内存管理问题/内存泄漏。
EDIT2:由于创建字段只是一个临时字段,并且似乎是唯一的选择,我尝试了这个 MySQL 命令。
set @rank=0;
select @rank:=@rank+1 AS rank, cId, clueDetails, location, author from tbl_clue where location = "loc" and author = "auth" order by rank ASC
它似乎显示了我想要的东西,但我的命令似乎与其他人通常给出的不同。(更多支架和其他东西)。我的命令可以吗?会不会有由此带来的间接影响?