从SQLite表中获取随机值

时间:2012-04-09 01:44:29

标签: java android sqlite

我目前正在开发Android应用,我正试图从数据库表中获取一个随机值,如下所示:

| ID | Score|
| 1  | 20   |
| 2  | 5    |
| 5  | 5    |
| 6  | 5    |
| 14 | 15   |

(假设这些是表中唯一的值)

我想从这张表中获得一个随机值,其中ID为40%,ID为10%,ID为10%,等等... 如果这是可能的,你会怎么做呢?

2 个答案:

答案 0 :(得分:1)

给定List<Integer>add()每首歌曲索引score次,Collections.shuffle()列表,并按顺序播放。为了获得更好的结果,请跳过连续的重复项。更多here

答案 1 :(得分:0)

任何已知数据库都没有随机选择的本机支持。如果你进行一些搜索,你可能会发现:

select * from my_table order by rand();

但是,当它试图对整个表格进行排序时,这是非常低效的。

如果您的数据集不是太大,您只需将整个表格拉入一个数组,然后从该数组中随机选择。

现在选择了wieghted,这更棘手。

一个更简单的版本可以解决这样的问题:

  1. 获取表格中所有ID(id)和权重(weight)的列表。
  2. 遍历列表并计算每个ID的累计权重cwieght
  3. 当您到达列表末尾时,您将获得所有权重的总和。选择0到该总数之间的随机数r
  4. 再次扫描列表,找到r >= cweight && r < cweight+weight项目,如果您是游戏,可以使用二进制搜索搜索。
  5. 这也有other smarter approaches,这取决于某些限制。