因此,我正在开发一种问答游戏,游戏会在屏幕上和下方的 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/