android - 如何在Android的mysql中随机选择列

标签 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_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/

相关文章:

android - 带 Volley 的 HTTP 发布 --- XML 发布,JSON 响应

android - 当应用程序关闭或未运行时,Android 上的 Cordova 推送插件无法工作

arrays - 为动态填充的对象数组生成 Mongoose 模式

php - 为什么我在 Laravel 中的简单属于关系不起作用?

python - SQLite/python - 在 while 循环内添加带有数据的列

java - 改造 GSON 将日期从 json 字符串序列化为 long 或 java.lang.Long

php - 使用单个表单 Laravel 将数据添加到多个表

android - 没有这样的列 : pratik (code 1): while compiling: DELETE FROM Insert_table WHERE NAME=pratik

php - SQLite3相当于mysql_num_rows

java - Android 中的傅里叶逆变换