A-AA+then

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

1,197
ตัวอย่างข้อมูลใน 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

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

7 ความคิดเห็น

    สวัสดีครับ...
    สงสัยว่า...ทำไมต้องคิวรี่ออกมาในลักษณะนี้ครับ (ขอทราบเหตุผล)
    
    ในระดับการคิวรี่โดยการ 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
^