PHP: Cách lấy ngẫu nhiên bản ghi bằng hàm RAND()
Giải phóng thời gian, khai phóng năng lực
Trong trường hợp ta 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 hoặc chọn ngẫu nhiên một số sản phẩm 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 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 mã sau sẽ giúp các bạn lấy ngẫu nhiên 1 bản ghi từ bảng sanpham.
SELECT * FROM sanpham 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 bản ghi.
Nếu muốn lấy N bản ghi (N là một số nguyên dương) thì ta làm như sau:
SELECT * FROM tên_bảng 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 FROM sanpham ORDER BY RAND() LIMIT 5;
Lưu ý: kỹ thuật này chỉ thích hợp cho những bảng có ít dữ liệu, nế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ẽ chậm.
Trong trường hợp bảng 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, ta xét đoạn truy vấn sql sau:
SET @ID = FLOOR(RAND( )* N) + 1;
Kỹ thuật này sẽ trả về kết quả nhanh hơn bởi 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.
Giải phóng thời gian, khai phóng năng lực