Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL nhận một giá trị ngẫu nhiên giữa hai giá trị

Trên thực tế, ROUND((RAND() * (max-min))+min) là cách tốt nhất trong MySQL để làm những gì bạn muốn. Nó cũng là cách tốt nhất trong ActionScript, JavaScript và Python. Thành thật mà nói, tôi thích nó hơn cách PHP vì nó thuận tiện hơn.

Bởi vì tôi không biết bạn sẽ trả về bao nhiêu hàng, nên tôi không thể khuyên bạn nên sử dụng PHP hay MySQL cho việc này tốt hơn, nhưng nếu bạn đang xử lý một số lượng lớn giá trị thì có lẽ bạn nên sử dụng sử dụng MySQL.

Phụ lục

Vì vậy, có một câu hỏi được đặt ra là liệu điều này tốt hơn trong PHP hay MySQL. Thay vì tranh luận về các nguyên tắc, tôi đã chạy như sau:

<pre><?php

$c = mysql_connect('localhost', 'root', '');

if(!$c) die('!');
echo mysql_select_db('test', $c)?'Connection':'Failure';
echo PHP_EOL;

echo ':::::::::::::::::::::::::BEGINNING MYSQL RAND::::::::::::::::::::::::::::::'.PHP_EOL;
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT ROUND(RAND() * (200-10) + 10) FROM dual' );
    $r = mysql_fetch_array( $r );
}
$end = microtime(1);

echo  ($end - $start) . " for MySQL select".PHP_EOL;

echo ':::::::::::::::::::::::::BEGINNING PHP RAND::::::::::::::::::::::::::::::' .PHP_EOL;
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT 200 AS two, 10 AS tem FROM dual' );
    $r = mysql_fetch_array( $r );
    $r[2]= rand($r[0], $r[1]);
}
$end = microtime(1);

echo  ($end - $start) . " for PHP select".PHP_EOL;

MySQL nhanh hơn khoảng 2-3%.

Tuy nhiên, nếu bạn sử dụng điều này (lưu ý, nhiều cột hơn trả về bởi MySQL):

<pre><?php

$c = mysql_connect('localhost', 'root', '');

if(!$c) die('!');
echo mysql_select_db('test', $c)?'Connection':'Failure';
echo PHP_EOL;

echo ':::::::::::::::::::::::::BEGINNING MYSQL RAND::::::::::::::::::::::::::::::'.PHP_EOL;
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT ROUND(RAND() * (200-10) + 10) as rd, 200 as two, 10 as ten FROM dual' );
    $r = mysql_fetch_array( $r );
}
$end = microtime(1);

echo  ($end - $start) . " for MySQL select".PHP_EOL;

echo ':::::::::::::::::::::::::BEGINNING PHP RAND::::::::::::::::::::::::::::::' .PHP_EOL;
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT 200 AS two, 10 AS tem FROM dual' );
    $r = mysql_fetch_array( $r );
    $r[2]= rand($r[0], $r[1]);
}
$end = microtime(1);

echo  ($end - $start) . " for PHP select".PHP_EOL;

MySQL đi sau 3-4% (kết quả rất không nhất quán) (kết quả tương tự nếu bạn không sử dụng chỉ định mảng cho $ r [2]).

Có vẻ như sự khác biệt chính đến từ số lượng bản ghi trả về PHP chứ không phải do hệ thống ngẫu nhiên hóa. Vì vậy, nếu bạn cần cột A, cột B và một giá trị ngẫu nhiên, hãy sử dụng PHP. Nếu bạn chỉ cần giá trị ngẫu nhiên, hãy sử dụng MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hai khóa chính được chỉ định trong cơ sở dữ liệu MySQL

  2. Nâng cấp MySql và tăng tự động gây ra khoảng trống

  3. Cách hàm LEFT () hoạt động trong MySQL

  4. SQL Group By với một Order By

  5. Cách nối các bảng với nhau - SQL