Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL получава произволна стойност между две стойности

Всъщност, ROUND((RAND() * (max-min))+min) е най-добрият начин в MySQL да правите това, което искате. Това също е най-добрият начин в ActionScript, JavaScript и Python. Честно казано, предпочитам го пред 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Можете ли да се присъедините към подзаявка с Doctrine 2 DQL?

  2. Изберете увеличено цяло число

  3. MySQL:Брой записи с последователни месеци

  4. Актуализиране на изгледи в MySQL

  5. MySQL през 2018 г.:Какво има в 8.0 и други наблюдения