如何在mysql for android中随机选择列

如何在mysql for android中随机选择列,android,database,sqlite,Android,Database,Sqlite,我的数据库中有一个表名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_READ

我的数据库中有一个表名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;
};
public Cursor getAllAnswers(int n)
{
字符串myPath=DB_PATH+DB_NAME;
myData=SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN\u READONLY);
String query=“SELECT”;
所选布尔[]=新布尔[]{false,false,false,false};
Random rand=新的Random();
对于(int i=0;i 0)
查询+=“,”;
int c=兰特·奈克斯汀(4);
while(选择[c])
c=兰特·耐克斯汀(4);
选择[c]=真;
查询+=“b”+整数.toString(c+1);
}
查询+=“来自其中_id=”“+n+”;”;
光标光标;
curs=myData.rawQuery(查询,空);
curs.moveToFirst();
myData.close();
返回游标;
};
应该是

ORDER BY RANDOM() LIMIT 1

为了确保我理解,您希望在一行中获取所有四列,但将游标中的列随机化,这样您的游标可能会以
{b2,b4,b3,b1}
结束,对吗?我想是什么把多项选择题的答案搞混了
orderby
在这方面对您没有帮助,因为它对行而不是列进行排序

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+"';"
String query=“SELECT”;
boolean[]selected=新布尔值{false,false,false,false};
Random rand=新的Random();
对于(int i=0;i 0)
查询+=“,”;
int c=兰特·奈克斯汀(4);
while(选择[c])
c=兰特·耐克斯汀(4);
选择[c]=真;
查询+=“b”+整数.toString(c+1);
}
查询+=“来自答案,其中_id=”“+n+”;”

或者,您可以将它们按顺序排列,然后使用类似的方法随机抓取每一列。

在sqlile中,如果运行RAND(),则不接受它。它会给您一个错误,正确的是RANDOM()。但是没有做我需要的。oops没有意识到这是sqlite。是的,随机是正确的解决方案,更新答案这正是我们要做的。让我应用你的答案来完成我的项目,我明天会做,如果你的答案有效,我会接受,谢谢。