दरअसल, ROUND((RAND() * (max-min))+min)
आप जो चाहते हैं उसे करने के लिए MySQL में सबसे अच्छा तरीका है। यह एक्शनस्क्रिप्ट, जावास्क्रिप्ट और पायथन में भी सबसे अच्छा तरीका है। ईमानदारी से, मैं इसे 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 पर वापस आने वाले रिकॉर्ड्स की संख्या से आता है, न कि रैंडमाइजेशन सिस्टम से। इसलिए, यदि आपको कॉलम ए, कॉलम बी और यादृच्छिक मान की आवश्यकता है, तो PHP का उपयोग करें। यदि आपको केवल यादृच्छिक मान की आवश्यकता है, तो MySQL का उपयोग करें।