Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เลือกแถวสุ่มใน MySQL


ในการเลือกแถวสุ่ม ให้ใช้ rand() กับ LIMIT จาก MySQL ไวยากรณ์มีดังนี้:

เลือก * จาก yourTableName ORDER BY RAND() LIMIT 1;

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง generateRandomRow -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> Name varchar(20), -> Age int, -> PRIMARY KEY(Id) -> ); แบบสอบถามตกลง 0 แถวได้รับผลกระทบ ( 1.66 วินาที)

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้:

mysql> แทรกลงใน generateRandomRow(Name,Age) values('John',23);Query OK, 1 แถวได้รับผลกระทบ (0.22 sec)mysql> แทรกใน generateRandomRow(Name,Age) values('Larry',21);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.32 วินาที)mysql> แทรกลงใน generateRandomRow(ชื่อ,อายุ) ค่า ('David',21); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.39 วินาที)mysql> แทรกลงใน generateRandomRow (ชื่อ, อายุ) values('Carol',24);Query OK, 1 แถวได้รับผลกระทบ (0.21 วินาที)mysql> แทรกลงใน generateRandomRow(Name,Age) values('Bob',27);Query OK, 1 แถวได้รับผลกระทบ (0.14 วินาที)mysql> แทรกค่า createRandomRow(Name,Age) ('Mike',29);Query OK, 1 แถวที่ได้รับผลกระทบ (0.19 วินาที)mysql> แทรกลงใน generateRandomRow(Name,Age) values('Sam',26);Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก generateRandomRow;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+------+| รหัส | ชื่อ | อายุ |+----+-------+------+| 1 | จอห์น | 23 || 2 | แลร์รี่ | 21 || 3 | เดวิด | 21 || 4 | แครอล | 24 || 5 | บ๊อบ | 27 || 6 | ไมค์ | 29 || 7 | แซม | 26 |+----+-------+------+7 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อเลือกแถวสุ่มจากตารางโดยใช้ rand() แบบสอบถามมีดังนี้:

mysql> เลือก *จากคำสั่ง generateRandomRow โดย rand() จำกัด 1;

ผลลัพธ์จะแสดงแถวสุ่ม:

<ก่อนหน้า>+----+------+------+| รหัส | ชื่อ | อายุ |+----+------+------+| 5 | บ๊อบ | 27 |+---+------+------+1 แถวในชุด (0.00 วินาที)

เมื่อเราเรียกใช้แบบสอบถามอีกครั้ง แถวสุ่มต่อไปนี้จะมองเห็นได้:

mysql> เลือก *จากคำสั่ง generateRandomRow โดย rand() จำกัด 1;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+------+------+| รหัส | ชื่อ | อายุ |+----+------+------+| 6 | ไมค์ | 29 |+----+------+------+1 แถวในชุด (0.00 วินาที)