Mục đích
Hàm RANDOM() sinh số ngẫu nhiên. Dùng trong ORDER BY RANDOM() để xáo trộn thứ tự bản ghi khi SELECT.
Ví dụ: Hiển thị danh sách ngẫu nhiên
DatabaseHelper.java
package com.example.randomdemo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
class DatabaseHelper extends SQLiteOpenHelper {
static final String DB_NAME = "salaryDatabase";
static final String TABLE = "SalaryDetails";
DatabaseHelper(Context context) {
super(context, DB_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE +
"(id INTEGER PRIMARY KEY, name TEXT, salary REAL, datetime DEFAULT CURRENT_TIMESTAMP)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int old, int n) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE);
onCreate(db);
}
boolean insert(String name, String salary) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("salary", salary);
db.insert(TABLE, null, cv);
return true;
}
// ORDER BY RANDOM() xáo trộn thứ tự mỗi lần truy vấn
ArrayList<String> getAllContacts() {
ArrayList<String> list = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor c = db.rawQuery(
"SELECT (id || ' : ' || name || ' : ' || salary || ' : ' || datetime) AS fullname " +
"FROM " + TABLE + " ORDER BY RANDOM()", null);
if (c.moveToFirst()) {
do {
list.add(c.getString(c.getColumnIndexOrThrow("fullname")));
} while (c.moveToNext());
}
c.close();
return list;
}
boolean update(String name, String salary) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("name", name);
cv.put("salary", salary);
db.update(TABLE, cv, "name=?", new String[]{name});
return true;
}
boolean delete() {
getWritableDatabase().delete(TABLE, null, null);
return true;
}
}
Kết quả
Mỗi lần nhấn nút Làm mới, danh sách hiển thị theo thứ tự ngẫu nhiên khác nhau.
Ứng dụng thực tế
- Quiz app: xáo trộn câu hỏi/đáp án.
- Gợi ý ngẫu nhiên: món ăn, bài viết, sản phẩm.
- Chia nhóm ngẫu nhiên.
Hiệu năng
ORDER BY RANDOM() quét toàn bảng và sắp xếp - chậm trên bảng lớn (>10k rows). Giải pháp thay thế:
-- Lấy 1 record ngẫu nhiên nhanh hơn SELECT * FROM table WHERE id >= (ABS(RANDOM()) % (SELECT MAX(id) FROM table)) LIMIT 1;
Kết hợp với LIMIT
ORDER BY RANDOM() LIMIT 5 lấy 5 bản ghi ngẫu nhiên.