การเตรียมข้อมูล
สร้างตารางเก็บค่าที่คั่นด้วยจุลภาค:
mysql> CREATE TABLE DemoTable1835 (
ListOfIds VARCHAR(20)
);
เพิ่มข้อมูลตัวอย่าง:
mysql> INSERT INTO DemoTable1835 VALUES('10,20,30');
mysql> INSERT INTO DemoTable1835 VALUES('70,80,90');
mysql> INSERT INTO DemoTable1835 VALUES('45,67,89');
mysql> INSERT INTO DemoTable1835 VALUES('98,96,49');
การสุ่มข้อมูลพร้อมเงื่อนไข
ใช้ ORDER BY RAND() ร่วมกับ NOT IN และ LIMIT:
mysql> SELECT * FROM DemoTable1835
WHERE ListOfIds NOT IN(10,20,70)
ORDER BY RAND()
LIMIT 2;
ผลลัพธ์ (สุ่ม 2 แถวที่ไม่มีค่า 10, 20, 70):
+-----------+
| ListOfIds |
+-----------+
| 98,96,49 |
| 45,67,89 |
+-----------+
คำเตือนเกี่ยวกับประสิทธิภาพ
ORDER BY RAND()อาจช้าเมื่อตารางมีข้อมูลมาก- สำหรับตารางใหญ่ ควรใช้วิธีอื่น เช่นสุ่ม ID แล้ว JOIN
- คอลัมน์ที่เก็บค่าคั่นด้วยจุลภาคไม่เหมาะกับการค้นหาดัชนี (Non-SARGable)
แนวทางแก้ไขข้อมูล
แนะนำให้ปรับโครงสร้างข้อมูลเป็นตารางความสัมพันธ์ (Normalized) แทนการเก็บค่าหลายค่าในคอลัมน์เดียว