我正在制作一个HighScore类,用于保存SQLite数据库中的高分。如果不止一个玩家获得相同的分数,那么我希望将新分数放在列表中的旧分数之上,将旧分数推到一行。
该表由列" rwId","得分"和"姓名"。首先,我将得分记为" PRIMARY KEY",以便列表按分数排序(向后)。但后来我认为最好将rowId设为主键,并在保存分数时设置此ID。这样,列表将以正确的顺序排列,以便以后更容易删除最低分。
无论哪种方式,如果主键已经被前一个分数占用,那么表中的旧分数和它下面的所有行都需要向下推一行。
这可能吗?
这是我到目前为止所做的事情(这并不是很重要):
public function CheckRank($score) {
$this->stmt = $this->sql->prepare('SELECT score, rowId FROM highscore ORDER BY score DESC LIMIT 10;');
$this->stmt->execute();
$this->res = $this->stmt->fetchAll(PDO::FETCH_ASSOC);
//Check what the 10 highest scores are an what row in the DB they're on
$i=0;
foreach ($this->res as $key => $value) {
$scorearray[$value['rowId']] = $value['score'];
$i++;
}
//Check if this score has already been set. If so, push old scores down and insert the new one
$rowsearch = array_search ($score, $scorearray);
if($rowsearch)
{
// HOW?
}
}