php mysql随机记录,php – 从MySQL中选择可变数量的随机记录
我想從數(shù)據(jù)庫(kù)中顯示一條隨機(jī)記錄.如果我選擇,我希望能夠顯示X個(gè)隨機(jī)記錄.因此,我需要從隨機(jī)選擇的ID列表中選擇前X個(gè)記錄
(除非地球尺寸急劇增加,否則將不會(huì)有超過(guò)500條記錄可供選擇.目前有66種可能.)
這個(gè)功能有效,但我怎樣才能讓它變得更好?
/***************************************************/
/* RandomSite */
//****************/
// Returns an array of random site IDs or NULL
/***************************************************/
function RandomSite($intNumberofSites = 1) {
$arrOutput = NULL;
//open the database
GetDatabaseConnection('dev');
//inefficient
//$strSQL = "SELECT id FROM site_info WHERE major <> 0 ORDER BY RAND() LIMIT ".$intNumberofSites.";";
//Not wonderfully random
//$strSQL = "SELECT id FROM site_info WHERE major <> 0 AND id >= (SELECT FLOOR( COUNT(*) * RAND()) FROM site_info ) ORDER BY id LIMIT ".$intNumberofSites.";";
//Manual selection from available pool of candidates ?? Can I do this better ??
$strSQL = "SELECT id FROM site_info WHERE major <> 0;";
if (is_numeric($intNumberofSites))
{
//excute my query
$result = @mysql_query($strSQL);
$i=-1;
//create an array I can work with ?? Can I do this better ??
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$arrResult[$i++] = $row[0];
}
//mix them up
shuffle($arrResult);
//take the first X number of results ?? Can I do this better ??
for ($i=0;$i
{
$arrOutput[$i] = $arrResult[$i];
}
}
return $arrOutput;
}
更新問(wèn)題:
我知道ORDER BY RAND(),我只是不想使用它,因?yàn)橛袀餮哉f(shuō)它不是最好的縮放和性能.我對(duì)我的代碼過(guò)于挑剔.我的作品ORDER BY RAND()有效,但我可以做得更好嗎?
更多更新
ID中有漏洞.沒(méi)有大量的流失,但任何流失都需要得到我們團(tuán)隊(duì)的批準(zhǔn),因此可以處理轉(zhuǎn)儲(chǔ)任何緩存.
謝謝你的回復(fù)!
總結(jié)
以上是生活随笔為你收集整理的php mysql随机记录,php – 从MySQL中选择可变数量的随机记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php三表关联,详解Yii2 hasOn
- 下一篇: php连接mysql并查询表数据,php