Random ข้อมูลมาแสดงผล 2 แบบ 2 วิธี
หากว่ามีข้อมูลอยู่ใน 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 |
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"]." "; } } ?> |
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"]." "; } ?> |
ส่วน ในแบบแรกถ้าต้องการให้แสดงข้อมูลที่ ละ 5 record ก็ทำการเปลี่ยน code ในส่วนของ for ที่แทนจะ for จนถึง count($arr) ก็เปลี่ยนเป็น 5 แทน เท่านี้ก็สามารถที่จะแสดงข้อมูลที่ละ 5 record ได้แล้ว
จะเห็นได้ว่า วิธีที่สอง ทำการ random ได้ง่ายกว่าวิธีแรกแต่ผมก็ยังไม่เคย ลองเหมือนกันว่าใน database ตัวอื่นๆจะมี function rand() ให้ใช้หรือ เปล่า แต่สำหรับวิธีแรกสามารถที่จะนำไปใช้ได้ในทุกๆ database แน่นอน เพราะว่าไม่ได้ใช้ อะไร นอกจาก select เลย
ไม่มีความคิดเห็น:
แสดงความคิดเห็น