Objective c - SQLite选择具有另一个值的随机行

时间:2012-03-27 11:10:08

标签: objective-c select random sqlite

基本上我有一个单词数据库,

此数据库包含rowID(主键),单词和单词长度为表格列。

我想选择一个随机行,其中length = x并获取该行的单词。

这适用于iPhone游戏项目,优先考虑的是查询尽可能快(搜索是在游戏中进行的)。

例如:

SELECT * FROM WordsDB WHERE >= (abs(random()) %% (SELECT max(rowid) FROM WordsDB)) LIMIT 1;

这个查询在选择随机行时要比ORDER BY RANDOM()LIMIT 1快得多,但是,如果我在查询中添加单词长度,我会遇到问题:

SELECT * FROM WordsDB WHERE length = 9 AND rowid >= (abs(random()) %% (SELECT max(rowid) FROM WordsDB)) LIMIT 1

大概是因为随机行的长度不总是9。

我只是想知道最快/最有效的方法是什么。

感谢您的时间

注意:2%符号是因为它在目标c中,并且查询被设置为字符串。

2 个答案:

答案 0 :(得分:1)

为WordsDB.length添加索引

create index if not exists WordsDBLengthIndex on WordsDB (length);

应该更快地选择此字段

答案 1 :(得分:1)

这个似乎对我有用:

select * from WordsDB 
where length = 9 
limit (abs(random()) % (select count(rowid) from WordsDB 
                        where length = 9)), 1;

请注意,length = 9条款中都会显示where

如果length似乎很慢,请添加索引。