限制SQLite的最大行数并相应地移动整个表

时间:2017-03-29 12:27:50

标签: sqlite android-studio

我想要做的事情听起来很容易实现,直到我开始考虑所有细节......所以我有一个有3个困难的游戏,我保存在1个表中的每个分数。该表有2列,一列用于分数,一列对用户不可见,因此我可以相应地对分数进行排序。但目前游戏正在保存任何没有订单或最大数量的分数,这不是很方便。相反,我想将它限制为每个难度的3个最高分,然后当 easy 难度达到最高分时,它应该将该分数添加到第一行移动行并删除那个曾经是这个困难之前的第3个。

以下是SQL如何存储我的分数: enter image description here 我想要做的是将行限制为9,目前它将继续添加到无穷大,然后使其存储每个难度的3个最高分数,以便当它们在应用程序中的ListView上显示时它们按降序排列

1 个答案:

答案 0 :(得分:0)

首先,插入新分数。然后你想删除那个难度的最低分。

对于特定难度 X ,此查询会列出您要保留的行:

SELECT *
FROM MyTable
WHERE difficulty = X
ORDER BY score DESC
LIMIT 3;

因此,您要删除该列表中不存在的所有行:

DELETE FROM MyTable
WHERE difficulty = X
  AND ID NOT IN (SELECT ID
                 FROM MyTable
                 WHERE difficulty = X
                 ORDER BY score DESC
                 LIMIT 3);

(即使没有三个分数,这个陈述也能正常运作。)