Thỉnh thoảng chúng ta sẽ cần phải chọn lựa dữ liệu ngẫu nhiên từ các bảng trong database , ví dụ như chọn một số bài viết ngẫu nhiên từ trang blog và hiển thị chúng trên các sidebar, chọn lựa hình ảnh ngẫu nhiên từ gallery…
MySQL không có bất kì một cầu lệnh nào giúp chúng ta lấy dữ liệu ngẫu nhiên, nhưng chúng ta sẽ tận dụng hàm RAND. Đoạn sql sau sẽ giúp các bạn lấy ngẫu nhiên 1 kết quả từ table.
SELECT * FROM table ORDER BY RAND() LIMIT 1
Trong đoạn truy vấn bên trên, ORDER BY sẽ sắp xếp kết quả theo thứ tự ngẫu nhiên, và LIMIT 1 sẽ chỉ lấy 1 kết quả.
Nếu bạn muốn lấy N lần kết quả thì các bạn chỉ cần thay số chỉ định cho chữ N.
SELECT * FROM table ORDER BY RAND() LIMIT N
Vi dụ như nếu muốn lấy 5 sản phẩm ngẫu nhiên, chúng ta viết câu truy vấn như sau :
SELECT productName, productLine
FROM products
ORDER BY RAND()
LIMIT 5;
Tuy nhiên , kỹ thuật này chỉ thích hợp cho những table có ít dữ liệu, nếu như những table nào có dữ liệu khủng thì nó sẽ tốn nhiều thời gian cho việc lấy ngẫu nhiên, do đó kết quả trả về sẽ rất chậm.
Tuy nhiên nếu table nào có cột ID với giá trị trải dài từ 1 đến N lần thi chúng ta có thể sử dụng kỹ thuật như sau :
– Đầu tiên, chúng ta sẽ chọn ngẫu nhiên số lượng trong khoảng từ 1 đến N
– Kế tiếp, chúng ta sẽ lấy dữ liệu ngẫu nhiên dựa trên số lượng ngẫu nhiên này.
Để dễ hiểu, các bạn xem đoạn truy vấn sql sau :
SET @ID = FLOOR(RAND( )* N) + 1;
SELECT * FROM table WHERE ID >= @ID LIMIT 1
Kỹ thuật này sẽ trả về kết quả nhanh hơn là vì :
– Nó sử dụng cột ID để đánh dấu chỉ mục.
– MySQL không cần phải sắp xếp lại toàn bộ table.
Mình hy vọng rằng với những câu chữ mà mình viết trong bài viết này, sẽ giúp các bạn hiểu rõ hơn. Nếu có điều gì gây khó hiểu , thì các bạn đừng ngần ngại để lại comment để có thể cùng nhau thảo luận nhé.