Hướng dẫn random mysql - mysql ngẫu nhiên
Trong bài viết này mình sẽ hướng dẫn cách lấy dữ liệu ngâu nhiên trong MySQL, đây là chức năng thường gặp khi bạn xây dựng các ứng dụng Website có sử dụng MySQL. Điển hình như: Show Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.
1. Lấy record ngẫu nhiên bằng ORDER BY RAND()MySQL không tích hợp bất kỳ câu lệnh nào để chọn các record ngẫu nhiên từ một bảng. Để thực hiện điều này ta bạn sử dụng hàm RAND (). Truy vấn sau đây chọn một hàng ngẫu nhiên trong một table bất kì: SELECT * FROM table_name ORDER BY RAND() LIMIT 1; Giải thích:: Bài viết này được đăng tại [free tuts .net]
Nếu bạn muốn chọn N bản ghi ngẫu nhiên từ bảng cơ sở dữ liệu, bạn cần thay đổi mệnh đề LIMIT như sau: SELECT * FROM table_name ORDER BY RAND() LIMIT N; Giả sử ta có table như sau:: Và câu SQL dưới đây sẽ lấy record ngẫu nhiên từ bảng này. SELECT customerNumber, customerName FROM customers ORDER BY RAND() LIMIT 5; Lưu ý rằng khi bạn chạy lệnh này thì mỗi lần chạy kêt quả sẽ khác nhau, bởi giá trị mà hàm RAND sinh ra là ngẫu nhiên. Kỹ thuật này hoạt động rất tốt với table nhỏ. Tuy nhiên, nó sẽ chậm đối với table lớn vì MySQL phải sắp xếp toàn bộ dữ liệu để chọn ngẫu nhiên. Tốc độ của truy vấn cũng phụ thuộc vào số hàng trong bảng. Bảng càng có nhiều hàng, thì càng mất nhiều thời gian để tạo số ngẫu nhiên cho mỗi hàng.
2. Lấy record ngẫu nhiên bằng lệnh JOINKỹ thuật này yêu cầu bảng phải có khóa chính tăng tự động (auto increment) và không có khoảng trống trong dãy thứ tự tăng dần. Tức là tăng dần 1, 2 ,3 thì ok, còn bị khuyết một giá trị như 1, 2, 5 ,6 thì không được. Truy vấn sau tạo một số ngẫu nhiên dựa trên cột khóa chính: SELECT ROUND(RAND() * ( SELECT MAX(id) FROM table_name)) AS id; Chúng ta có thể JOIN table với kết quả này để lấy record ngẫu nhiên. SELECT t.* FROM table_name AS t INNER JOIN (SELECT ROUND( RAND() * (SELECT MAX(id) FROM table_NAME )) AS id ) AS x WHERE t.id >= x.id LIMIT 1; Sử dụng kỹ thuật này bạn phải thực hiện truy vấn nhiều lần nếu muốn lấy nhiều record ngẫu nhiên, bởi vì câu lệnh sub query chỉ trả về một giá trị random mà thôi. Truy vấn sau đây trả về một khách hàng ngẫu nhiên từ bảng SELECT * FROM table_name ORDER BY RAND() LIMIT N;0. SELECT t.customerNumber, t.customerName FROM customers AS t JOIN (SELECT ROUND(RAND() * (SELECT MAX(customerNumber) FROM customers)) AS customerNumber ) AS x WHERE t.customerNumber >= x.customerNumber LIMIT 1; 3. Lấy record ngẫu nhiên bằng JOIN và tạo biếnTrong trường hợp bảng có cột khóa chính SELECT * FROM table_name ORDER BY RAND() LIMIT N;1 với các giá trị nằm trong phạm vi 1..N, bạn có thể sử dụng kỹ thuật sau:
SELECT table. * FROM (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table)) random_num, @num:=@num + 1 FROM (SELECT @num:=0) AS a, table LIMIT N) AS b, table AS t WHERE b.random_num = t.id; Trên là ba cách đơn giản nhất để lấy record ngẫu nhiên trong MySQL. Bạn có thể áp dụng để đưa vào dự án của mình. Trong ba cách đó thì bạn không nên sử dụng cách 1 nhé, nó sẽ không tốt nếu dữ liệu quá lớn. Hàm RAND trong MySQL được sử dụng để tạo các số ngẫu nhiên giữa 0 và 1.RAND trong MySQL được sử dụng để tạo các số ngẫu nhiên giữa 0 và 1. SELECT RAND( ), RAND( ), RAND( ); Kết quả là: Tiếp tục lệnh trên sẽ cho kết quả là: SELECT RAND(1), RAND( ), RAND( ); Bạn có thể sử dụng ORDER BY RAND() để ngẫu nhiên hóa một tập hợp các hàng hoặc giá trị như sau:ORDER BY RAND() để ngẫu nhiên hóa một tập hợp các hàng hoặc giá trị như sau: Để hiểu cách sử dụng của ORDER BY RAND(), giả sử có bảng sinhvienk58 có các bản ghi sau: Quảng cáo Bây giờ, sử dụng các lệnh sau sẽ cho kết quả khác nhau: SELECT * FROM sinhvienk58 ORDER BY RAND(); Kết quả là: Tiếp tục lệnh trên sẽ cho kết quả là: Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS. Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube: Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi. Các bài học MySQL phổ biến khác tại VietJack::
ham_huu_ich_trong_mysql.jsp Bài viết liên quan
|