gpt4 book ai didi

php - MySQL获取两个值之间的随机值

转载 作者:IT老高 更新时间:2023-10-28 23:41:36 25 4
gpt4 key购买 nike

我在一行中有两列:min_valuemax_value。有没有办法进行选择:

SELECT RAND(`min_v`, `max_v`) `foo` [..]

我确实意识到 RAND 做了不同的事情;我想出的最接近(在帮助下)是 (RAND() * (max-min))+min,虽然它会产生一个 float ,然后我需要 ROUND() 和这是完全错误的。

除非有人可以提出替代方案(这将非常有用),否则我将采用 PHP 方式。

最佳答案

实际上,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。

关于php - MySQL获取两个值之间的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com