如何从MYSQL表中显示3个随机值
How would I go about displaying 3 random values each time a page is loaded? At the minute I have it displaying one at a time using the following code:
<?php
$sSQLQuery = "SELECT careername FROM careers ORDER BY RAND() LIMIT 1";
$aResult = mysql_query($sSQLQuery);
$aRow = mysql_fetch_array($aResult, MYSQL_ASSOC);
$sQuoteOfTheDay = $aRow['careername'];
echo $sQuoteOfTheDay;
?>
I have tried doing LIMIT 5 but that had no effect on the result. Thanks
每次加载页面时,如何显示3个随机值? 在那一刻,我使用以下代码一次显示一个: p>
&lt;?php
$ sSQLQuery =“SELECT careername FROM careers ORDER BY RAND()LIMIT 1" ;
$ aResult = mysql_query($ sSQLQuery);
$ aRow = mysql_fetch_array($ aResult,MYSQL_ASSOC);
$ sQuoteOfTheDay = $ aRow ['careername'];
echo $ sQuoteOfTheDay;
?&gt;
code> pre>
我尝试过LIMIT 5,但这对结果没有影响。 谢谢 p>
div>
You'll have to call mysql_fetch_assoc()
again for every single record your are fetching.
So, use LIMIT 3
and then simply loop through the result set. Like this:
$sSQLQuery = "SELECT careername FROM careers ORDER BY RAND() LIMIT 3";
$aResult = mysql_query($sSQLQuery);
while($aRow = mysql_fetch_array($aResult, MYSQL_ASSOC)) {
$sQuoteOfTheDay = $aRow['careername'];
echo $sQuoteOfTheDay;
}
Refer to the manual page of mysql_fetch_assoc()
. You'll find more examples there.
You are on the right track. Change your LIMIT
to '3' and then loop through all of the results:
while ($aRow = mysql_fetch_array($aResult, MYSQL_ASSOC)) {
echo $aRow['careername'];
}
You shall change the LIMIT
to 3 and iterate through the result rows.
$sSQLQuery = "SELECT careername FROM careers ORDER BY RAND() LIMIT 3";
$aResult = mysql_query($sSQLQuery);
while ($aRow = mysql_fetch_array($aResult, MYSQL_ASSOC))
{
$sQuoteOfTheDay = $aRow['careername'];
echo $sQuoteOfTheDay;
}
$aResult->free();
Don't forget to free $aResult
at the end.
ORDER BY RAND() LIMIT n
is a horror performance killer: it will calculate RAND()
for all rows in the table, then throw away most. Imagine what this does to a table with a million rows.
The best way to do this, is to get the rowcount (e.g. run SELECT COUNT(*) FROM tablename;
), then use this value to calculate three indices, then run SELECT * FROM tablename ORDER BY primarykey LIMIT $index,1
three times.
The break even for this on a CPU-bound server is at ca. 100 rows!