Đô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.
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
* 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