2014-03-28 124 views
0

我想這SQL查詢工作:ORDER BY RANDOM()在科爾多瓦/ PhoneGap的

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

但是,我得到了以下錯誤:

E/SQLiteLog: (1) not authorized to use function: 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); 
} 

錯誤:

Uncaught TypeError: Cannot read property 'length' of undefined

謝謝!

+2

如果你有那麼幾行,爲什麼不把它們隨機放入內存中? –

+0

如何通過「val」首先進行排序,然後將它們隨機存儲在內存中? – candlejack

+0

@JoachimIsaksson我添加了更多的代碼,請檢查它! – candlejack

回答

0
var res = shuffle(resultArray); 
for (var i=0; i < res.length; i++) 
{ 
    name = (res[i].name); 
} 
+1

還請解釋你的代碼是更有教育意義的。 – lpapp

+1

基本上,這是*正確*的方式來訪問數組的數組*隨機*,見我的問題中的洗牌功能。 – candlejack

+1

我的意思是在你的回答中,不是評論。 – lpapp