java - SQLite random() 行,但其中 1 行必须具有特定值?

标签 java android sqlite

因此,我正在开发一种问答游戏,游戏会在屏幕上和下方的 4 个按钮上显示一个问题,其中会填入 1 个正确答案和 3 个错误答案。简单吧?我正在尝试使用以下 rawQuery() 加载 4 个答案,除了必须出现的正确答案外,所有答案都必须是随机的。

SQLite:

myCursor = db.rawQuery("SELECT * FROM Answers WHERE QuestionID = 3 ORDER BY RANDOM() LIMIT 4", null);

因此,QuestionID 是指定要显示哪个问题以加载正确答案的字段。我需要有很多答案,这样玩家就无法记住它们。像这样的伪代码可能吗?

myCursor = db.rawQuery("SELECT * FROM Answers WHERE QuestionID = 3 ORDER BY RANDOM('WHERE RightWrong = 1 LIMIT 1') LIMIT 4", null);

RightWrong 是告诉它是否是正确答案的字段(在 DB 内),它是一个 INT,如果它被设置为 1 则它是正确答案。

我在 SQLite 数据库浏览器中使用 SQLiteAssetHelper。

最佳答案

我可能会尝试按照以下连接的方式进行查询。

myCursor = db.rawQuery("SELECT * FROM (SELECT * FROM (SELECT * FROM Answers
    WHERE QuestionID = 3 AND RightWrong = 0 ORDER BY RANDOM() LIMIT 3)
    UNION SELECT * FROM (SELECT * FROM Answers WHERE QuestionID = 3 AND
    RightWrong = 1 LIMIT 1)) ORDER BY RANDOM() LIMIT 4", null)

有几点需要注意,首先,这不是经过测试的查询,我不能 100% 确定 SQL 语法是否正确,但它应该可以帮助您理解我的意思。此外,我相信这将始终将正确答案作为最后一个返回值,您将需要在稍后的代码中随机化它所在的位置。我希望这会有所帮助。

--编辑-- 修复了查询,使其真正有效

关于java - SQLite random() 行,但其中 1 行必须具有特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31141869/

相关文章:

SQLite最大计数问题

java - 删除在循环Java中的arraylist中创建的对象

java - 有没有办法改变多个项目? 【很难描述,里面有例子】

使用 Google 云端点 : Datastore vs SQL 的 Android 应用

java - `Matrix.setRotate` 和 `Matrix.postRotate` 有什么区别

sql - 为什么 SQLite 不使用我的索引进行排序

android - CursorAdapter 并不总是在 AutoCompleteTextView 上工作

java - 如何使用单独的比较器类对数组列表进行排序

java - 关于 BufferedImages 和图像的问题

java - libgdx - 检查 body 是否被触摸