2010-08-17 82 views
3

我正在試驗Safari瀏覽器中內置的SQL支持,並且我想通過Javascript選擇一個隨機查詢。從Safaris客戶端數據庫中選擇隨機行

SELECT * FROM questions ORDER BY random() 

返回未經授權使用的功能:隨機

this screenshot

有什麼建議嗎?

+0

Safari網頁SQL存儲使用SQLite HTTP://www.sqlite。 org/ – Joey 2010-08-17 09:10:55

回答

0

也許像下面將工作:

SELECT * 
    FROM (SELECT RANDOM() as RANDOM_NUM, Q.* 
      FROM QUESTIONS Q) 
    ORDER BY RANDOM_NUM 

分享和享受。

+0

感謝您的回覆,但奇怪的是我再次得到相同的錯誤。未經授權使用功能:隨機 這是一個安全問題? – user422644 2010-08-17 10:53:14

+0

@ user422644 - 聽起來確實如此。有趣的是,SQLite站點的這個頁面(http://www.sqlite.org/omitted.html)表示GRANT和REVOKE不受支持,所以我不確定如何解決這個問題。希望我能提供更多的想法。 – 2010-08-17 11:12:00

+0

另一種方法是在我得到它們後洗牌結果。 \t \t db.transaction( \t \t \t功能(事務){ \t \t \t \t \t transaction.executeSql( \t \t \t \t \t \t 'SELECT * FROM問題', \t \t \t \t \t \t [] , \t \t \t \t \t \t功能(交易,結果){ \t \t \t \t \t \t \t //最好洗牌的結果和循環的方式? \t \t \t \t \t \t}, \t \t \t \t \t \t的ErrorHandler \t \t \t \t \t); \t \t \t}, \t \t \t transactionErrorHandler \t \t); – user422644 2010-08-17 11:21:30

3

查詢使用非隨機的順序,然後洗牌的結果:

tx.executeSql('SELECT * FROM questions',[], function(tx, resultSet) { 
    var resultArray = []; 

    for(var i=0; i < resultSet.rows.length; i+=1) { 
     resultArray.push(resultSet.rows.item(i)); 
    } 

    var shuffledArray = shuffle(resultArray); 

    // do something with the shuffled array... 
}); 

shuffle()可能是這樣的:https://stackoverflow.com/a/962890/490560

+0

這個工作適合我!謝謝! – candlejack 2014-03-28 18:42:06

+0

或者,包含下劃線並使用'_.shuffle()'或甚至'_。樣品()';後者給你一個給定長度的隨機結果。 – pduersteler 2014-10-05 14:58:39