Php随机行帮助
我已经创建了一些代码,它将返回一个随机行(好吧,所有行都是随机顺序的) 但我认为这是非常不必要的,在一个大的数据库中会是一个问题 有人知道更好的方法吗 这是我目前的代码:Php随机行帮助,php,mysql,random,loops,Php,Mysql,Random,Loops,我已经创建了一些代码,它将返回一个随机行(好吧,所有行都是随机顺序的) 但我认为这是非常不必要的,在一个大的数据库中会是一个问题 有人知道更好的方法吗 这是我目前的代码: $count3 = 1; $count4 = 1; //Civilian stuff... $query = ("SELECT * FROM `*Table Name*` ORDER BY `Id` ASC"); $result = mysql_query($query); while($row = mysql_fetch_a
$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;
}
}
}
$count3=1;
$count4=1;
//民用物品。。。
$query=(“从`*表名*`ORDER BY`Id`ASC中选择*);
$result=mysql\u query($query);
while($row=mysql\u fetch\u数组($result)){
$count=$count+1;
$civilianid=$row['Id'];
$arrayofids[$count]=$civilianid;
//echo$arrayofids[$count];
}
while($alldone!=true){
$randomnum=(rand()%$count)+1;
//echo$randomnum。“
”;
//echo$arrayofids[$randomnum]。“
”;
$currentuserid=$arrayofids[$randomnum];
$count3+=1;
而($count4<$count3){
$count4+=1;
$currentarrayid=$listdone[$count4];
//回显“$currentarrayid.”:“$currentuserid.”;
如果($currentarrayid==$currentuserid){
$found=true;
//回显“'”。$found.“'”;
}
}
如果($found==true){
//重置数组/变量。。。
$count4=1;
$found=false;
}否则{
$listdone[$count3]=$currentuserid;
//回显“$count3.”;“$listdone[$count3]”;
$query=(“从`*Tablesname*`中选择*,其中Id='$currentuserid'”);
$result=mysql\u query($query);
$row=mysql\u fetch\u数组($result);
$username=$row['username'];
echo$username.“
”;
$count4=1;
$amountdone+=1;
如果($amountdone==$count){/$count
$alldone=true;
}
}
}
基本上,它将循环,直到它得到一个尚未选择的id(随机)。
-所以最后一个用户名可能需要几个小时:P
这是“坏”代码吗P:(
您可以将其委托给MySQL:
SELECT * FROM table_name ORDER BY RAND() LIMIT 1;
它将从您的表中返回一个随机行,我想这应该比您的php解决方案更有效
您可能有兴趣查看以下堆栈溢出帖子以获得替代解决方案:
$query = ("SELECT * FROM `*Table Name*` ORDER BY RAND()");
然后在一个简单的循环中显示它们
或者,您可以将所有结果放入一个数组,然后随机化数组中的顺序
我假设第一个选项会给你最好的结果,但正确的解决方案是测量性能,如果“太慢”,则尝试优化
但是,从数组中随机选取一个元素,看看你是否已经这样做了,如果你已经这样做了,就再试一次,这是非常可怕的。如果你不明白为什么所有变量都是从1开始的,而不是像数组那样从0开始的,我不知道,我只是决定它们都应该:PIgnore大多数评论,它们都是just帮助我在预览时识别问题…在一个大数据库中,这是“有效的”还是其他什么,会运行得慢吗?Edit:Nvm,您已经知道UpdateEdit不是有效的,因为它需要一个完整的表扫描。签出并@Skillman它比您正在使用的方法更有效。Shuffle()听起来不错,但我可以两种都试试。谢谢,