Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để tạo 5 số ngẫu nhiên trong thủ tục lưu trữ MySQL?

Để tạo số ngẫu nhiên, hãy sử dụng hàm ORDER BY RAND () trong MySQL. Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable (Value int);
Query OK, 0 rows affected (0.76 sec)

Chèn một số bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable values(89);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values(78);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(75);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(76);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(74);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(99);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(101);
Query OK, 1 row affected (0.15 sec)

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau -

+-------+
| Value |
+-------+
| 89    |
| 98    |
| 10    |
| 78    |
| 75    |
| 76    |
| 74    |
| 99    |
| 101   |
+-------+
9 rows in set (0.00 sec)

Sau đây là truy vấn để tạo 5 số ngẫu nhiên trong thủ tục lưu trữ MySQL -

mysql> DELIMITER //
mysql> CREATE PROCEDURE generate_Random5Numbers()
   BEGIN
      SELECT GROUP_CONCAT(Value SEPARATOR '/')
      FROM ( SELECT Value
         FROM ( SELECT Value
            FROM DemoTable
            WHERE Value BETWEEN 10 AND 100
         ORDER BY RAND()
         LIMIT 5) Ascending_Order
      ORDER BY Value) 5Values;
   END
   //
Query OK, 0 rows affected (0.31 sec)
mysql> DELIMITER ;

Gọi một thủ tục được lưu trữ với sự trợ giúp của lệnh gọi.

mysql> call generate_Random5Numbers();

Điều này sẽ tạo ra kết quả sau -

+-----------------------------------+
| GROUP_CONCAT(Value SEPARATOR '/') |
+-----------------------------------+
| 89/74/78/99/10                   |
+-----------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)