สุ่มข้อมูลมาแสดงมีวิธีการอย่างไรครับ

ตัวอย่างข้อมูลใน Database



ID   Name   Lastname

1    AAA     5555

2    BBB      4444

3    CCC      3333

4    DDD     2222





ต้องการให้ Query ออกมาแล้วโชว์ข้อมูลเป็นอย่างนี้ครับ



1   BBB    4444

2   CCC    5555

3   AAA   2222

4   DDD   3333



คือให้ทุกฟิวล์สลับที่อยู่กันด้วยแบบไม่เรียงแถวให้สลับแถวกันอยู่ครับ ไม่ทราบว่ามีวิธีการที่จะทำได้หรือปล่าวครับ
24 ก.พ. 2554 7 1,831


สวัสดีครับ...

สงสัยว่า...ทำไมต้องคิวรี่ออกมาในลักษณะนี้ครับ (ขอทราบเหตุผล)



ในระดับการคิวรี่โดยการ SELECT คงทำไม่ได้ครับ แต่ถ้าเอามาจัดการด้วยคำสั่งของภาษาก็มีทางเป็นไปได้


#1

โดยปกติเราก็ใช้คำสั่ง ORDER BY RAND() เพื่อให้เรียงลำดับแบบสุ่มได้ครับ

SELECT * FROM tablename ORDER BY RAND()


ผมไม่ทราบว่า ID ที่เรียงตามลำดับมีความเกี่ยวข้องหรือไม่ แต่ในทางปฏบัติ เราสามารถใช้ PHP เพื่อจัดการหมายเลขลำดับตอนแสดงผลได้ครับ โดยไม่เกี่ยวข้องกันกับ ID จริงๆของข้อมูลตอน Query



ปล. ผมว่าน่าจะเป็น NO. มากกว่า ID นะครับ
#2

ขอบคุณทั้งสองท่้านมากครับ



ตอบข้อแรกนะครับ 

เอาไปใช้ในการเลือกองค์ประกอบของ Part ว่ามีส่วนประกอบอะไรบ้าง โดยให้สุ่มไปอยู่ในหลายๆบรรทัด เพื่อป้องกันพนักงานไม่ได้เช็คข้อมูลกับ Part ที่จะส่งให้กับลูกค้าครับ



ส่วนของท่านอาจารย์ผมลองทำแล้ว จะสุ่มได้ครับ แต่ข้อมูลก็จะเรียงลงมาตามบรรทัด ไม่สุ่มแบบที่ยกตัวอย่างครับ ทำให้ถ้่าพนักงานรู้ตัวแรกก็จะรู้เลยว่าข้อมูลถัดไปก็จะอยู่บรรทัดเดียวกัน



เลยไม่ทราบว่ามีวิธีการออกแบบยังไงที่จะสามารถกำหนดได้ตามความต้องการอย่างนี้ครับ
#3


ORDER BY RAND()

มันสุ่มตาม record ครับ แต่โจทย์บอกให้สุ่มฟิลดิ์ไปที่ record อื่นด้วย (Lastname ย้ายไปอยู่ที่ Name อื่น)





ไม่แน่ใจว่าผมเข้าใจถูกหรือเปล่านะ...ว่า





ในแต่ละ part จะมีองค์ประกอบอยู่หลายอย่างใช่มั้ยครับ โดยที่ ถ้าพนักงานเลือก part อะไรก็ตามจะมีองค์ประกอบต่างๆขึ้นมาให้ดูด้วย

ความต้องการก็คือ เมื่อพนักงานเลือก part ขึ้นมา ก็ให้ระบบแสดงองค์ประกอบขึ้นมาเรียงแบบสุ่มให้พนักงานตรวจสอบใช่มั้ยครับ





ขอปรับความเข้าใจก่อนนะ เพราะไม่แน่ใจว่าที่ผมเข้าใจถูกต้องแค่ไหน


#4

ท่าน BlueEye เข้าใจถูกแล้่วครับท่าน เลยไม่รู้ว่าจะออกแบบยังไงเลย ไม่ทราบว่าท่านพอจะมีทางแนะนำไหมครับ 
#5

555+++ ดูทีแรกเห็น BBB = 4444 เหมือนเดิม



คิดว่าพอเป็นไปได้ แต่ก็น่าจะยุ่งยาก หากใช้คำสั่ง SQL นะครับ โดยการสร้าง View แล้ว สุ่มแต่ละ field ไปใส่ ตารางใหม่ ทีละอัน



แนวคิดที่น่าจะลองดูคือ การ query 2 ครั้งครับ



ครั้งแรก query เอา คอลัมน์แรกออกมาแบบสุ่มก่อน

ครั้งที่ สอง ก็ query เอา คอลัมน์ที่ 2 ออกมาแบบสุ่มเช่นกัน



ก็จะได้ข้อมูลที่เปลี่ยนไปเรื่อยๆแล้วครับ



การ query อาจใช้การ query ใส่ array ไว้ก่อน แล้วค่อยจัดการแสดงผลตอนหลังก้ได้ครับ



ลองดูนะครับ
#6


ถ้าตารางที่เก็บข้อมูลเป็นไปตามรูปที่ให้มาก็ทำแบบที่คุณ Goragod ได้เหมือนกันครับ

แต่ส่วนตัวคิดว่า ระบบที่ทำออกมาให้ง่ายและเป็นมิตรกับผู้ใช้งานน่าจะทำให้ผู้ใช้มีกำลังใจในการใช้งานมากกว่า

นั่นหมายความว่าข้อมูลจะผิดพลาดน้อยลง ถ้าผู้ใช้มีความใส่ใจในการใช้งาน



ถ้าต้องให้พนักงานเลือก part ขึ้นมาเพื่อตรวจสอบองค์ประกอบอะไรบ้าง ผมจะออกแบบตารางขึ้นมา 2 ตาราง



1. ตารางเก็บชื่อสินค้า และรายละเอียดเฉพาะสินค้านั้นๆ

2. ตารางเก็บชิ้นส่วนหรือองค์ประกอบ ที่จะเป็นองค์ประกอบของสินค้าแต่ละตัว

 



ทั้งสองตารางเชื่อมต่อกันด้วย primary id ของสินค้า โดยที่ relationship เป็นแบบ One to Many เพราะสินค้าหนึ่งตัวจะมี

องค์ประกอบได้หลายส่วน ยกตัวอย่างเช่น



----------------------------                       -----------------------

| product_id (pk)    |----------            |  part_id (pk)  |

| product_name     |          |--------> |  product_id   |

|                          |                      |  part_name    |

-----------------------------                      -----------------------

 



หน้าจอของระบบอาจจะแสดงรายชื่อสินค้าออกมาให้เลือก แล้วเมื่อเลือกสินค้าใดแล้วก็จะแสดงรายละเอียด part

ขึ้นมาให้ดูโดยสุ่มรายการ part ทั้งหมดออกมาแสดงแบบเรียงบันทัดแบบสุ่ม ตามคิวรี่ที่ คุณ Goragod แนะนำ



แค่นี้ก่อนละกัน เพราะกลัวผมจะแนะนำได้ไม่ตรงกับใจเท่าไร


#7
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^