วิธีการสุ่มค่าจาก SQL ที่ดีกว่าการใช้ ORDER BY RAND()

โดยทั่วไปเท่าที่ผมเห็น การจะสั่ง sql ให้ดึงแถวที่ต้องการมาโดยเรียงลำดับแบบสุ่มจะใช้วิธี ORDER BY RAND() เช่น

แต่วิธีนี้ไม่ใช่วิธีที่ดีเลย เพราะสมมุตว่าข้อมูลมีจะนวน 100000 แถว จะต้องเกิดการ random ค่าทั้งหมด 100000 ครั้ง นอกจากนั้นเมื่อ random เสร็จ ก็ต้องเอาข้อมูลนั้นมาเรียงลำดับใหม่อีกครั้ง ซึ่งในขั้นตอนการเรียง โดยมากแล้ว ตัว Database จะไม่ยอมให้ใช้เนื้อที่เกินจำนวนหนึ่งใน RAM แต่ถ้าข้อมูลเยอะๆแบบนี้ จะใช้การเขียนลง file ก่อน แล้วค่อย sort ซึ่งทำให้ช้ากว่าใน RAM มาก

ดังนั้นผมจึงหาวิธีสุ่มค่าที่มีประสิทธิ์ภาพที่ดีกว่าในเน็ต ซึ่งได้ผลลัพธ์คือเว็บนี้ เค้าแนะนำให้ทำแบบนี้แทนครับ

โดย table หมายถึงชื่อตาราง และตรง @lim := 10 หมายถึงต้องการ 10 ตัว ส่วนตัวเลข 20090301 เค้าบอกเป็นเลขอะไรก็ได้ เค้าเอาเลขนี้มาจากวันที่โพส และควรเปลี่ยนทุกครั้ง เพื่อให้ผลไม่เหมือนเดิม

หลักการทำงานคือเหมือนเค้าใช้หลักความน่าจะเป็นแทนการสุ่มมั้งครับ

จริงๆในเว็บต้นฉบับ เค้าบอกมีวิธีสำหรับแถวเดียวอยู่ด้วย แต่ผมไม่สามารถทำความเข้าใจได้ครับ

[SOLVE] เจอ Sorry, you can’t view or download this file at this time. ใน Google Drive แก้อย่างไร

คำเตือนปัจจุบันวิธีนี้ใช้ไม่ได้แล้ว ให้ไปทำตามลิงค์นี้แทนครับ

ปัญหา

สำหรับใครที่ใช้ Google Drive อยู่เวลาจะโหลดไฟล์อะไรบางท่านอาจจะเจอแบบนี้
picture show Sorry, you can't view or download this file at this time.

สาเหตุ

ไม่ ทราบแน่ชัด จากการ search จาก google ผมได้ความมาว่าหากมีการโหลดเกิน 28 ครั้ง ในครั้งที่ 29 จะขึ้นมา(คาดว่าเป็น 28 ครั้งต่อเดือน มั้งครับ) แต่ตอนผมลองทำดันโหลดได้เป็น 100 เลยครับ ไม่แน่ใจเลยครับ อาจจะนับ BW ขาออกรวมมั้งครับ

วิธีแก้

วิธีแก้ในกรณีของผู้อับโหลดผมไม่ทราบครับ คงต้องติดต่อ google drive เอาเอง

แต่ในกรณ๊ที่เราเป็นผู้โหลด สามารถแก้ได้ดังนี้ครับ

สิ่งที่ต้องเตรียม

  1. ลิงด์สำหรับโหลดไฟล์นั้น
  2. บัญชี Google ที่มี Google Drive และมีเนื้อที่เหลืออย่างน้อย 2 เท่าของขนาดไฟล์ที่ต้องการโหลด (เช่นจะโหลดไฟล์ขนาด 100 MB ต้องเหลือมากกว่า 200 MB)

เริ่มโหลดกัน

  1. ล้อกผินเข้าบัญชี Google เพื่อใช้งาน Google Drive
  2. เข้าไปยังลิงค์ Download อย่างไฟล์ที่ผมต้องการโหลดคือ ลิงค์นี้ (มัน อาจจะไม่โดน Limit นะครับ พอดีตัวที่ผมต้องการโหลดจริงๆ มันของละเมิดลิขสิทธิ์ ไม่อยาก reshare หรือ hotlink ครับ อันนี้เป็นเอกสารที่ผมจะเอามาอ่านเพิ่มเติม เพราะของที่เรียนมันเป็นอังกฤษ ขี้เกียจแปล)
  3. ค้นหาตัว ID ของไฟล์ให้ได้ ในกรณีของผมคือ 0B_8iG7NZUFynUXRIT2pKRlRNWms (มันอยู่ในลิงค์อ่ะครับ ส่วนมากอยู่กลัง id= และอยู่ก่อน & หรืออาจจะเป็นตัวแปลกๆยาวๆครับ สังเกตไม่ยาก)
  4. เข้าไปที่ https://docs.google.com/file/d/แทนตรงนี้ด้วย ID/edit เช่นของผมก็จะเป็น https://docs.google.com/file/d/0B_8iG7NZUFynUXRIT2pKRlRNWms/edit
  5. จากนั้นกดรูปโฟลเดอร์ข้างๆรูปดาวตรงชื่อไฟล์ครับ
    Click Folder Icon
  6. จะมีหน้าต่างขึ้นมา กดที่ MyDrive ให้มีเครื่องหมายถูกขึ้นหน้า MyDrive แล้วกด MoveSelect Destination and move
  7. เข้าไปที่ Google Drive ของเรา
  8. จะเห็นว่ามี File เพิ่มเข้ามาใน Drive ของเรา แต่เรากดไปก็ยังโหลดไม่ได้อยู่ดีนะครับ
    Found New File In Google Drive
  9. ให้คลิกขวาที่ไฟล์นั้น แล้วกด Make a copy
    Right Click And Make A Copy
  10. จะได้ไฟล์ใหม่มา ชื่อ Copy of ตามด้วยชื่อไฟล์เก่า มา ซึ่งเรามาสามารถโหลดจากตัวนี้ได้ครับ พอโหลดเสร็จก็สามารถลบทั้ง 2 ไฟล์ทิ้งได้เลย หรือลบต้นฉบับแค่ตัวเดียวก็ได้ครับ
    Get A Copy Of

เรียบร้อยครับ แค่นี้เราก็สามารถโหลดได้ปกติแล้วครับ วิธีง่ายๆใช่ไหมครับ

[บันทึก] นรก การกู้ WordPress แบบ DB ไม่ตรงกับกับเวอร์ชั่นไฟล์

เกริ่นนำก่อนคือ ผมเป็นโปรแกรมเมอร์แบบ Part time ให้กับเว็บไซต์เว็บหนึ่งซึ่งใหญ่พอสมควร คนเข้าระดับหลักหมื่นต่อวัน PageView ระดับ 2 แสนอับ ทำให้เค้าอยากให้ทำระบบ cache ขึ้นมาเอง (พวก plugin เค้าบอกใช้แล้วไม่ work) ซึ่งระบบนี้คือ cache แบบเป็น static file ทั้งหน้า บางส่วนที่เป็น comment ใช้ AJAX เอา( cache เหมือนกันด้วย เคลียเมื่อมีคน comment) โดย cache ส่วนอื่นที่ไม่ใช่ comment จะเคลียเมื่อถูกสั่งเท่านั้นไม่มีหมดเวลา ก็ใช่มาปีกว่าไม่มีปัญหา

ที นี้นรกเกิดเมื่อวันดีคืนดีไอ้ SSD ของ Server เจ้ากรรม แม่มเสือกพัง ทำให้ความซวยบังเกิดเพราะ backup ที่มีเป็นของ DB ตอนเดือน 5 แต่ตัว file ของ server ที่เคย backup ไว้มีของเดือน 2 ครับ (มีบางไฟล์ที่ได้ของเดือน 5 มา) ทีนี้พอเปิด server ปุป เข้าหน้าแรกเจอ 404 ภาพหายทั้งหน้า (555) แถมปัญหาเกิดทันที คือพอเว็บ run ขึ้นปุป โหลดพุ่งทันที ผมเลยตั้งประเด็นไปที่ cache ครับ ว่า ในระหว่าง 3 เดือนผมเคยไปทำไรมันรึเปล่า เนื่องจากไม่มีตัว version control ผลคืองมครับ ไม่ทราบว่ามันคืออะไรเกิดจากอะไร แต่เปิดปุปแม่มพัง

หลังจากงมไป ประมาณ 5 ชั่วโมง ว่าเป็นอะไรทำไม cache ไม่ทำงาน ผมดันกดผิดสิ่งที่ได้คือ หน้า 404 ผมเกิดความคิดบัดดลว่าไอ้เห้นี่แหละ ทำโหลดพุ่ง เพราะ cache ตัวนี้เนื่องจากไม่มีกำหนดเวลา ผมเลยไม่ cache 404 กลัวว่าถ้า cache ไปแล้วตอนหลังมีชื่อซ้ำมันจะเรียก cache ก่อน ทำให้การโหลด 404 ทั้งหมดต้องไป query DB เลยต้องดัก 404 ว่าไม่ต้องทำอะไรทั้งนั้นครับ เรื่องถึงได้จบ โหลดร่วงอย่างไว นั่งทำตั้งนาน