我正在嘗試創建一個帶有資料庫的測驗應用程式,其中包含兩個表,一個用于主題,一個用于問題。topicID 是我的問題表中的外鍵。我想從每個 topicID 中檢索 2 個隨機問題,有 7 個主題,到目前為止,我只嘗試檢索一個主題,但 Idk 如何在同一函式中檢索其余主題。
有趣的 getAllQuestions(): ArrayList {
val qList = ArrayList<MathQuestions>()
val db: SQLiteDatabase = this.readableDatabase
var sqlStatement = "SELECT * FROM $QuestionTableName WHERE $QTopicColumn_ID = '1' ORDER BY RAND() LIMIT 2"
val cursor: Cursor = db.rawQuery(sqlStatement, null)
if (cursor.moveToFirst())
do {
val id: Int = cursor.getInt(0)
val tId: Int = cursor.getInt(1)
val question: String = cursor.getString(2)
val option1: String = cursor.getString(3)
val option2: String = cursor.getString(4)
val option3: String = cursor.getString(5)
val optionR: String = cursor.getString(6)
val p = MathQuestions(id, tId, question, option1, option2, option3, optionR)
qList.add(p)
} while (cursor.moveToNext())
cursor.close()
db.close()
return qList
}
uj5u.com熱心網友回復:
一種方法是遞回 CTE,它將遍歷您的主題,然后可以使用回圈中的每個主題在 union all 中執行您的 ORDER BY RAND() LIMIT 2 查詢。
CTE - 公用表運算式
uj5u.com熱心網友回復:
您可以使用UNION來組合多個 SELECTS。
但是,ORDER BY 和 LIMIT 遵循 UNION 的(即用于 SELECT 整體):-
-
在復合 SELECT 中,所有組成的 SELECT 必須回傳相同數量的結果列。由于復合 SELECT 的組件必須是簡單的 SELECT 陳述句,它們可能不包含 ORDER BY 或 LIMIT 子句。ORDER BY 和 LIMIT 子句只能出現在整個復合 SELECT 的末尾,并且僅當復合的最后一個元素不是 VALUES 子句時才出現。
-
所以你需要嵌入在子查詢中的 ORDER 和 LIMIT,它們為 SELECT/UNION 中的 IN 子句提供值。每個 SELECT/UNION 的子查詢選擇 2 個隨機問題的rowid列,該列驅動 SELECT/UNION 選擇的實際行,從而允許每個選擇的 ORDER BY AND LIMIT。
- rowid是一個通常隱藏的列,它是唯一的并且存在于所有表中,除了那些用WITHOUT ROWID表或虛擬表定義的表。
以下是我認為您想要的,另外還按主題對整個集合進行了排序:-
val SQLStatment = "SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '1' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '2' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '3' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '4' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '5' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '6' ORDER BY random() LIMIT 2)\n"
"UNION SELECT * FROM $QuestionTableName WHERE rowid IN (SELECT rowid FROM $QuestionTableName WHERE $QTopicColumn_ID = '7' ORDER BY random() LIMIT 2)\n"
"ORDER BY $QTopicColumn_ID /* OPTIONAL if you want the rows sorted according to topic */ ;"
";"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416052.html
標籤:
上一篇:日歷沒有回傳正確的時間
