หากว่ามีข้อมูลอยู่ใน Database ( MySQL ) 50 record คุณจะทำการ สุ่มข้อมูลออกมาแสดงครั้งละ 10 record ได้อย่างไร หลายคนก็หลายวิธีคิด บางคนอาจจะบอกว่า ก็ทำการเขียน code ให้ random ID ออกมาก่อน แล้วค่อยเอา ID ที่ได้ไป select จาก database อีกที (วิธีนี้ก็ทำได้ แต่ผมจะแนะนำอีกวิธีหนึงที่ง่ายกว่า สะดวกกว่า และเร็วกว่า มาดูซิว่าผมจะทำยังไง)
ในการ random ข้อมูลจาก databse mysql มีหลายวิธี วิธีใครวิธีมัน เมื่อก่อนตอนที่ผมเริ่มทำระบบ elerning ใหม่ๆ ผมทำการ random ข้อสอบโดยการ random ID ที่อยู่ใน array ก่อน จากนั้นนำ ID ที่ได้ไป select จาก MySQL อีกทีหนึง ในตอนนั้นคิดว่าวิธีนี้เป็นวิธีที่สะดวกที่สุดแล้วนะนี้ แต่ตอนนี้มีวิธีใหม่ที่พึงรู้มาจากที่ได้อ่าน manual ของ MySQL ซึ้ง MySQL สามารถที่จะใช้ function rand() ได้เลยโดยที่ไม่ต้องเขียน function เพื่อทำการ random ขึ้นมาเอง เดี่ยวมาลองดูวิธีแรกกันเลย
สมมุติให้ข้อมูลต่างๆ เป็นดังนี้นะครับ
Database Name = rand_db
Table Name = rand_table
และมีข้อมูลภายใน table ดังนี้
ID | Value |
1 | Test 1 |
2 | Test 2 |
3 | Test 3 |
4 | Test 4 |
5 | Test 5 |
6 | Test 6 |
7 | Test 7 |
8 | Test 8 |
9 | Test 9 |
10 | Test 10 |
จากนั้นผมก็เขียน code เพื่อทำการ random โดยใช้ function shuffle() เพื่อทำการ random ข้อมูลที่อยู่ใน array จากนั้นก็นำ ID ที่ได้ไป select ข้อมูลจาก table อีกทีหนึง เพียงเท่านี้เราก็ได้ข้อมูลที่สามารถ random ได้แล้ว ดูจากตัวอย่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $arr = array(1,2,3,4,5,6,7,8,9,10); shuffle($arr); for($i=0;$i<count($arr);$i++){ //print $arr[$i]." "; $query = "SELECT * FROM rand_table WHERE ID='".$arr[$i]."'"; $result = mysql_query($query); while ($line = mysql_fetch_array($result)) { print $line["ID"].",".$line["Value"]." "; } } ?> |
มาดูวิธีที่สองเลยดีกว่า วิธีนี้จะง่ายกว่าแบบแรก เพราะว่าเราไม่ต้องทำการ random เพื่อทำการหา ID ออกมาก่อน แต่เราจะใช้ function rand() ของ MySQL เพื่อทำการ random ข้อมูลออกมาเลย ดูจากตัวอย่างนะครับ เข้าใจง่ายกว่าอธิบาย
1 2 3 4 5 6 7 8 9 | <?php $query = "SELECT * FROM rand_table ORDER BY RAND() LIMIT 0,5"; $result = mysql_query($query); while ($line = mysql_fetch_array($result)) { print $line["ID"].",".$line["Value"]." "; } ?> |
โดยใน code ตัวอย่างนี้จะทำการ random ข้อมูลจาก database ออกมาครั้ง ละ 5 record ถ้าต้องการให้ แสดงข้อมูลทั้งหมดก็ตัดคำว่า LIMIT 0,5 ออกไปเท่านั้น
ส่วน ในแบบแรกถ้าต้องการให้แสดงข้อมูลที่ ละ 5 record ก็ทำการเปลี่ยน code ในส่วนของ for ที่แทนจะ for จนถึง count($arr) ก็เปลี่ยนเป็น 5 แทน เท่านี้ก็สามารถที่จะแสดงข้อมูลที่ละ 5 record ได้แล้ว
จะเห็นได้ว่า วิธีที่สอง ทำการ random ได้ง่ายกว่าวิธีแรกแต่ผมก็ยังไม่เคย ลองเหมือนกันว่าใน database ตัวอื่นๆจะมี function rand() ให้ใช้หรือ เปล่า แต่สำหรับวิธีแรกสามารถที่จะนำไปใช้ได้ในทุกๆ database แน่นอน เพราะว่าไม่ได้ใช้ อะไร นอกจาก select เลย