実際には、ROUND((RAND() * (max-min))+min)
MySQLであなたがやりたいことをするための最良の方法です。また、ActionScript、JavaScript、およびPythonでの最良の方法です。正直なところ、PHPの方が便利なので、PHPの方法よりも好きです。
返される行数がわからないため、PHPとMySQLのどちらを使用するのがよいかはわかりませんが、多数の値を処理する場合は、おそらくより適切です。 MySQLを使用します。
補遺
それで、これがPHPと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) 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は約2〜3%高速です。
ただし、これを使用する場合(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は3〜4%遅れています(非常に一貫性のない結果)($ r [2]に配列インデックスの割り当てを使用しない場合、ほぼ同じ結果になります)。
主な違いは、ランダム化システム自体ではなく、PHPに返されるレコードの数にあるようです。したがって、列A、列B、およびランダムな値が必要な場合は、PHPを使用してください。ランダムな値のみが必要な場合は、MySQLを使用してください。