我的数据库中有一个表名 Answers,有 5 列 _id、b1、b2、b3、b4,我要做的就是在游标中随机获取列 b1、b2、b3、b4,我我能够使用下一个代码将它们按顺序放入我的光标中:
public Cursor getAllAnswers(int n)
{
String myPath = DB_PATH + DB_NAME;
myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
Cursor curs;
curs=myData.rawQuery("SELECT b1, b2, b3, b4 FROM Answers WHERE _id='"+n+"';", null);
curs.moveToFirst();
myData.close();
return curs;
};
并尝试使用
随机获取它们curs=myData.rawQuery("SELECT b1, b2, b3, b4 FROM Answers WHERE _id='"+n+"' ORDER BY RANDOM() LIMIT 1;", null);
但不工作。感谢您提前的帮助
已编辑以显示完成 Geobits 显示的随机列(如果您也需要)的正确方法:
public Cursor getAllAnswers(int n)
{
String myPath = DB_PATH + DB_NAME;
myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
String query = "SELECT ";
boolean[] chosen = new boolean[]{false, false, false, false};
Random rand = new Random();
for(int i=0;i<4;i++)
{
if(i > 0)
query += ", ";
int c = rand.nextInt(4);
while(chosen[c])
c = rand.nextInt(4);
chosen[c] = true;
query += "b" + Integer.toString(c+1);
}
query += " FROM Answers WHERE _id='"+n+"';";
Cursor curs;
curs=myData.rawQuery(query, null);
curs.moveToFirst();
myData.close();
return curs;
};
最佳答案
为了确保我理解,您希望将所有四列放在一行中,但随机化光标内的列,因此您的光标最终可能会{b2, b4, b3, b1}
,对吗?我猜有什么东西可以混合多项选择答案吗? ORDER BY
不会对您有帮助,因为它对行而不是列进行排序。
SQLite 将按照您查询的顺序显示它们,目前为 b1, b2, b3, b4
。要将它们混合起来,您必须随机化查询字符串本身。
String query = "SELECT ";
boolean[] chosen = new boolean{false, false, false, false};
Random rand = new Random();
for(int i=0;i<4;i++)
{
if(i > 0)
query += ", ";
int c = rand.nextInt(4);
while(chosen[c])
c = rand.nextInt(4);
chosen[c] = true;
query += "b" + Integer.toString(c+1);
}
query += " FROM Answers WHERE _id='"+n+"';"
或者,您可以按顺序排列它们,然后使用类似的东西随机抓取每一列。
关于android - 如何在Android的mysql中随机选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878008/