2011-11-20 39 views
10

Tôi muốn yêu cầu 5 hàng ngẫu nhiên từ bảng SQL của tôi bằng cách sử dụng php. ví dụ, tôi cần phải:Chọn Hàng Ngẫu nhiên từ SQL Sử dụng PHP

mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5"); 
+4

Bạn có thấy các chủ đề liên quan với chính xác cùng một câu hỏi được hỏi không? –

Trả lời

19
SELECT * FROM catalogue order by RAND() LIMIT 5 

Edit:

Đối với những gì giá trị của nó, hãy lưu ý rằng việc sử dụng rand() trên một bảng với số lượng lớn hàng sẽ là chậm. Điều này thực sự có thể làm hỏng máy chủ của bạn.

Một số Giải pháp:

MediaWiki sử dụng một thủ thuật thú vị (ví đặc biệt của Wikipedia: Tính năng ngẫu nhiên): bảng với các bài viết có một cột phụ với một số ngẫu nhiên (được tạo ra khi bài báo được tạo ra). Để có được một bài viết ngẫu nhiên, hãy tạo một số ngẫu nhiên và nhận bài viết với giá trị lớn hơn hoặc nhỏ hơn tiếp theo (không nhớ lại) trong cột số ngẫu nhiên. Với một chỉ mục, điều này có thể rất nhanh. (Và MediaWiki được viết bằng PHP và được phát triển cho MySQL.)

Nhưng điều này chỉ dành cho một hàng ngẫu nhiên duy nhất.

+0

Bạn có nên sử dụng một cái gì đó như .. CHỌN * TỪ danh mục WHERE user_type = 'trật tự' thông thường bằng RAND() LIMIT 5 ???? –

+0

@GuchoCa, Đúng vậy. Khi kích thước bảng của bạn phát triển mà bạn bắt đầu nhận thấy thời gian chính được sử dụng trong truy vấn này, bạn sẽ phải tìm ra các phương thức để giảm bớt điều đó, như MediaWiki sử dụng. – Pheonix

+0

Điều gì về bạn nhận được độ dài của bảng (như kiểm tra xem có bao nhiêu bản ghi bảng và cho phép 500K là số lượng lớn bản ghi), sau đó chỉ ngẫu nhiên chọn 5 số từ tổng số đó và sau đó kéo 5 bản ghi đó từ bảng ? – Ali

3

Nếu bạn đang chọn hàng ngẫu nhiên từ một bảng rất lớn, bạn có thể muốn thử nghiệm với các phương pháp tiếp cận trong đường dẫn sau:

http://akinas.com/pages/en/blog/mysql_random_row/

lưu ý: chỉ để chia sẻ lựa chọn khác với tất cả mọi người

5

Giả sử bảng có AUTO INCREMENT trên bạn có thể nhận ID lớn nhất với

SELECT id FROM catalogue ORDER BY id DESC LIMIT 1 

và wit ID nhỏ nhất h

SELECT id FROM catalogue ORDER BY id ASC LIMIT 1 

làm cho nó có thể làm điều này

$randomId = mt_rand($smallestId, $biggestId); 
$randomSql = mysql_query("SELECT * FROM catalogue WHERE id='$randomId'"); 

Đối với năm hàng bạn có thể tạo ID ngẫu nhiên gấp năm lần.

+0

nếu thiếu id ngẫu nhiên đó, truy vấn sẽ thất bại – warren

Các vấn đề liên quan