【问题标题】:ORDER BY RANDOM() in Cordova/PhonegapORDER BY RANDOM() 在 Cordova/Phonegap
【发布时间】:2014-03-28 17:50:42
【问题描述】:

我正在尝试使用此 SQL 查询:

"SELECT * FROM people WHERE gender='female' ORDER BY val, RANDOM();"

但是,我收到以下错误:

E/SQLiteLog: (1) 未授权使用函数:random

有没有等效的方法来做到这一点?如果可能,使用单个查询。

我读到 Cordova / Phonegap - SQLite 禁用了RANDOM () 功能,因为它会占用大量内存,并创建临时表,但该表最多有 800 行,结果由WHERE 过滤。

编辑: 我试图使用以下函数弄乱结果 但后来我得到一个错误!

function shuffle(array) {
    var counter = array.length,
        temp, index;
    // While there are elements in the array
    while (counter > 0) {
        // Pick a random index
        index = Math.floor(Math.random() * counter);
        // Decrease counter by 1
        counter--;
        // And swap the last element with it
        temp = array[counter];
        array[counter] = array[index];
        array[index] = temp;
    }
    return array;
}
var resultArray = [];
for (var x = 0; x < results.rows.length; x += 1) {
    resultArray.push(results.rows.item(x));
}
var res = shuffle(resultArray);
for (var i = 0; i < res.rows.length; i++) {
    name = (res.rows.item(i).name);
}

错误:

未捕获的类型错误:无法读取未定义的属性“长度”

谢谢!

【问题讨论】:

  • 如果你有那么几行,为什么不将它们拉入并在内存中随机化?
  • 如何先按“val”排序,然后在内存中随机化?
  • @JoachimIsaksson 我添加了更多代码,请检查!

标签: android sql sqlite cordova


【解决方案1】:
var res = shuffle(resultArray);
for (var i=0; i < res.length; i++) 
{
    name = (res[i].name);
}

【讨论】:

  • 还请解释您的代码以更具教育意义。
  • 基本上,这是正确访问数组数组随机的方法,请参阅我的问题中的随机播放函数。
  • 我的意思是你的回答,而不是 cmets。
猜你喜欢
  • 1970-01-01
  • 2012-09-13
  • 1970-01-01
  • 2014-08-07
  • 2015-03-19
  • 2014-03-30
  • 2014-03-25
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多