sql >> データベース >  >> RDS >> Mysql

MySQLは2つの値の間でランダムな値を取得します

    実際には、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を使用してください。



    1. PostgreSQLエラーログをデコードする方法

    2. com.mysql.jdbc.MysqlDataTruncation:データの切り捨て:データが列'column_name'に対して長すぎます

    3. MySQL:ロック待機タイムアウトを超えました

    4. T-SQL UDFがスキーマにバインドされているかどうかを確認する方法(暗号化されている場合でも)