แฮะๆมีคำถามอีกแล้วครับเรื่องความเร็วและใช้การประมวลผลน้อยที่สุด
คือต้องการสุ่มรูปออกมาแสดง 1 รูป ผมจะสุ่มจากฐานข้อมูลดี หรือดึงรูปจากห้องรูปมาสุ่มแล้วแสดงดีครับ
หรือใครมีหลักการที่ดีกว่านั้นก็ว่ามาครับ
ผมต้องสุ่มบ่อยๆด้วยทำอย่างไรถึงจะไม่หนัก server ครับ

ห้องรูป คงหมายถึงโฟลเดอร์เก็บรูปนะครับ
ผมชอบสุ่มจากโฟลเดอร์เก็บรูปมากกว่า
เพราะระบบไฟล์จะทำงานเร็วกว่าอยู่แล้ว แต่ hdd จะหมุนหนัก ดังนั้น
จริงๆ มันมีไอเดียง่ายๆ แต่ว่ามันต้องประยุกต์ให้เหมาะกับแต่ละเว็บครับ
สมมุติอย่างเป็น upic.me ของคุณ icez (ต้องขอเอามาเป็นเคสโดยไม่ได้รับอนุญาตนะ งิๆ)
ลักษณะ url ของ thumbnail จะเป็น
http://upic.me/i/vf/o2s66.gif
ถ้าเรามาวิเคราะห์จะพบว่ารูปแบบ (pattern) จะได้
http://upic.me/ ชื่อโฮส
i/ โฟลเดอร์ thumbnail
vf/ โฟลเดอร์ซอยหั่น ความน่าจะเป็นคือ a-z และ 0-9 จำนวน 2 หลัก
o2s66.gif ชื่อไฟล์รูปภาพ ความน่าจะเป็นคือ a-z และ 0-9 จำนวน 2 หลัก แล้วตามด้วยชื่อไฟล์เดิม
ส่วนหนึ่งที่เราพอให้ php ทำงานแทนได้ เช่น โฟลเดอร์ซอยหั่น เพราะน่าจะมีครบ (ถ้าไม่มีก็สุ่มใหม่ซะ)
และเราจะใช้ความสามารถของ glob ที่สามารถเรียกรายการไฟล์แบบ wildcard ได้
สรุปโค้ดคร่าวๆ นะ ก็น่าจะได้แนวนี้
$range = array_merge(range('a', 'z'), range('0', '9')); //สร้างชุดอักษร
do {
$rd1 = array_rand($range).array_rand($range); //สร้างอักษรสุ่ม 2 ตัว
if(!file_exists("i/".$range[$rd1]."/")) continue; //ตรวจสอบโฟลเดอร์ย่อย ไม่มีก็กลับไปทำใหม่
$list = glob("i/".$range[$rd1]."/{*.jpg,*.gif,*.png}", GLOB_BRACE); //ค้นหาไฟล์ภาพทั้งหมดในโฟลเดอร์ย่อยที่สุ่มขึ้น
$key = array_rand($list); //เรียกออกมา
$pickup = $list[$key];
break;
} while (0);
echo "Random: ".$pickup;
นี้เป็นแค่ตัวอย่างนะครับ ต้องอาศัยปัจจุจัยหลายอย่าง
แต่อยากให้เห็นแนวคิด มันประยุกษ์ได้เยอะ
