22 thg 10, 2015

Select random các records từ database


Đôi khi lập trình bạn vẫn thường gặp trường hợp phải xử lý vấn đề trên. Ví dụ: Lấy ngẫu nhiên danh sách câu hỏi sử dụng cho chương trình thi trắc nghiệm.

Rất nhiều bạn chọn giải pháp là xử lý dữ liệu đã được lấy lên từ database.
Hôm nay mình giới thiệu các truy vấn các câu hỏi từ database:

Cách thứ nhất : dùng hàm 
Rand() hàm này sẽ trả về giá trị ngẫu nhiên > 0 và < 1.

Nhưng xử dụng hàm này có một bất lợi: khi bạn sử dụng trực tiếp hàm này trong câu lệnh truy vấn sẽ tạo ra một giá trị giống hệt nhau cho tất cả các records. Câu lệnh truy vấn sau :

1
2
SELECT TOP 5 ProductName, RAND() as RandomValue FROM products ORDER BY 2
SELECT RAND()

Returns result 0.7154366573674853

sẽ cho ra kết quả:

ProductName RandomValue
Alice Mutton 0.80020779549998178
Aniseed Syrup 0.80020779549998178
Boston Crab Meat 0.80020779549998178
Camembert Pierrot 0.80020779549998178
Carnarvon Tigers 0.80020779549998178

Các giải quyết là viết một funciton sử dụng hàm rand này.

Cách thứ 2: Sử dụng hàm 
NewID(). Hàm này khắc phục vấn đề gặp ở trên với hàm rand(). Khi bạn sử dụng trực tiếp hàm NewID trong câu lệnh select thì kết quả sẽ tạo ra các giá trị ngẫu nhiên hoàn toàn khác nhau.

1
SELECT TOP 5 productName FROM products ORDER BY NEWID()

kết quả chạy lần thứ nhất :
* Guaraná Fantástica
* Tunnbröd
* Ikura
* Filo Mix
* Genen Shouyu

Kết quả chạy lần thứ 2:

* Mozzarella di Giovanni
* Scottish Longbreads
* Gustaf's Knäckebröd
* Louisiana Fiery Hot Pepper Sauce
* Filo Mix

tham khảo Địa chỉ này

Select random các records từ database Rating: 4.5 Diposkan Oleh: http://pdunoteit.blogspot.com/