簡體   English   中英

PHP隨機行幫助

[英]Php random row help

我創建了一些將返回隨機行的代碼,(但是,所有行都以隨機順序),但是我假設它的代碼效率很低,並且在大型數據庫中將是一個問題...

有人知道更好的方法嗎?

這是我當前的代碼:

$count3 = 1;
$count4 = 1;
//Civilian stuff...
$query = ("SELECT * FROM `*Table Name*` ORDER BY `Id` ASC");
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$count = $count + 1;
$civilianid = $row['Id'];
$arrayofids[$count] = $civilianid;
//echo $arrayofids[$count];
}

while($alldone != true) {
$randomnum = (rand()%$count) + 1;
//echo $randomnum . "<br>";
//echo $arrayofids[$randomnum] . "<br>";
$currentuserid = $arrayofids[$randomnum];
$count3 += 1;

while($count4 < $count3) {
$count4 += 1;
$currentarrayid = $listdone[$count4];
//echo "<b>" . $currentarrayid . ":" . $currentuserid . "</b> ";
if ($currentarrayid == $currentuserid){
$found = true;
//echo " '" .$found. "' ";
}
}

if ($found == true) {
//Reset array/variables...
$count4 = 1;
$found = false;
} else {
$listdone[$count3] = $currentuserid;
//echo "<u>" . $count3 .";". $listdone[$count3] . "</u> ";
$query = ("SELECT * FROM `*Tablesname*` WHERE Id = '$currentuserid'");
$result = mysql_query($query);
$row = mysql_fetch_array($result);
$username = $row['Username'];
echo $username . "<br>";
$count4 = 1;
$amountdone += 1;
if ($amountdone == $count) { //$count
$alldone = true;
}
}
}

基本上,它將循環直到獲得尚未被選擇的ID(隨機)。 -所以最后一個用戶名可能要花幾個小時:P

這是“不良”代碼嗎? :P :(

您可以將其委托給MySQL:

SELECT * FROM table_name ORDER BY RAND() LIMIT 1;

它將從您的表中返回一個隨機行,我想應該比您的php解決方案更有效。 但是,在大型數據庫中,它仍然很慢。

您可能有興趣查看以下Stack Overflow帖子中的替代解決方案:

您可以更改查詢以按隨機順序為您提供所有結果...

$query = ("SELECT * FROM `*Table Name*` ORDER BY RAND()");

然后將它們全部顯示在一個簡單的循環中。

或者,您可以將所有結果放入數組中,然后將數組中的順序隨機化。 您可以使用php shuffle()函數。 http://www.php.net/manual/zh/function.shuffle.php

我認為第一種選擇將為您帶來最佳結果,但是正確的解決方案將是衡量性能並嘗試優化它是否“太慢”。

但是,從數組中選擇一個隨機元素,看看是否已經完成該操作,然后再嘗試一次,這是很可怕的 除此之外,什么都不要做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM