Php 如何通过rand()使订单对页面无效?
我有一个代码,它可以从表Php 如何通过rand()使订单对页面无效?,php,mysql,sql,Php,Mysql,Sql,我有一个代码,它可以从表combbined\u attack中随机打印行,并显示每页的10个结果 if (!isset($_GET['page'])) { $_GET['page'] = 10; } if(empty($_GET['page'])) { $PageNumber = 1; } else { $PageNumber = abs($_GET['page']); } $First_l
combbined\u attack
中随机打印行,并显示每页的10个结果
if (!isset($_GET['page'])) {
$_GET['page'] = 10;
}
if(empty($_GET['page'])) {
$PageNumber = 1;
} else {
$PageNumber = abs($_GET['page']);
}
$First_limit = $PerPage * $PageNumber - $PerPage;
$Limit = $First_limit;
$get_av = $db->query("SELECT * FROM `combined_attack` WHERE (army_1=0 || army_2=0) && start=0 ORDER BY RAND() LIMIT $Limit,$PerPage");
一切都很好,但当我在页面之间移动时,查询会再次随机化结果,使页面变得不相关
有什么建议吗?谢谢大家! 不要那样做。不,说真的。你想达到什么目的?大多数情况下,您需要一个特定的顺序-这是使结果稳定的唯一方法。否则,您必须拥有某种类型的查询运行id,并将其上载到db,以提供稳定的顺序。为什么你认为你想要一个“随机”的顺序?我需要它是随机的,但也有页面。我不需要每次都是相同的排序。我想让它随机只有当有人在第1页。但是,如果他把页面移到了最右边,就保持同样的排序。我是说,你几乎永远不会想要这样,因为这会导致非常奇怪的行为。例如,如果您试图找出谁“赢得”了一场战斗,结果可能取决于语句运行-如果双方同时请求信息会发生什么?您或者需要以某种方式缓存排序(通过在db端存储某些内容,或者在php中存储所有行),或者选择一个稳定的排序。请注意,
orderbyrand()
不能使用索引,因此速度会很慢。谢谢,我会记住这一点。但我还是想找出解决的办法。我正在尝试打印“战斗室”,它现在只影响用户看到的列表中房间的位置。@OfirH您可以获取整个结果集并将其存储/缓存。因此,不要将分页开始/限制发送到sql,而是在循环中执行。这并不是通常推荐的(获取所有结果),但我不确定如何才能通过order by rand获得您想要的。。