首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php随机行帮助

Php随机行帮助
EN

Stack Overflow用户
提问于 2010-06-10 10:28:37
回答 2查看 664关注 0票数 0

我已经创建了一些代码来返回一个随机行,(嗯,所有的行都是随机的),但是我假设它是非常无效的,在一个大数据库中是一个问题.

有谁知道更好的方法吗?

以下是我的当前代码:

代码语言:javascript
复制
$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 (随机)。最后一个用户名-So可能需要几个小时:P

这是“坏”代码吗?:

EN

回答 2

Stack Overflow用户

发布于 2010-06-10 10:32:09

您可以将其委托给MySQL:

代码语言:javascript
复制
SELECT * FROM table_name ORDER BY RAND() LIMIT 1;

它将从您的表中返回一个随机行,我想这应该比php解决方案更有效。尽管如此,在一个大型数据库中,它仍将是缓慢的。

您可能有兴趣查看以下堆栈溢出帖子,以获得其他解决方案:

票数 1
EN

Stack Overflow用户

发布于 2010-06-10 10:38:09

您可以更改查询以以随机顺序给出所有结果.

代码语言:javascript
复制
$query = ("SELECT * FROM `*Table Name*` ORDER BY RAND()");

然后在一个简单的循环中显示它们。

或者,您可以将所有结果放入数组中,然后将数组中的顺序随机化。为此,您可以使用php ()函数。http://www.php.net/manual/en/function.shuffle.php

我假设第一个选项会给出最好的结果,但是正确的解决方案将是衡量性能,并在“太慢”的情况下尝试优化。

但是,从数组中选择一个随机元素,看看是否已经完成了该元素,如果已经做了,则再试一次,这是可怕的。除了那样做什么都行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3013534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档