我正在使用 jQuery infinite-scroll砖石画廊上的插件。我的问题是在按随机 ORDER BY rand()
排序时,Infinite Scroll 中会加载重复记录。
例如:如果我向数据库添加了 10 张图片,
- 正在加载主页 - 1、5、3、4、2(随机加载五张图片)
- 正在加载第二页 - 6、2、9、8、5 ( 2 和 5 再次加载 )
- 在没有 7 和 10 的情况下到达了 END
索引.php:
<?php
include ("includes/db.php");
$per_page = 5;
if (isset($_GET["page"])) {
$page = $_GET["page"];
}
else {
$page=1;
}
$start_from = ($page-1) * $per_page;
$query = "SELECT * FROM data ORDER BY rand() LIMIT $start_from, $per_page";
$result = mysqli_query ($con, $query);
?>
<?php
while ($row = mysqli_fetch_array($result)) {
?>
<div id ="container" class="transitions-enabled infinite-scroll clearfix">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<?php } ?>
<nav id="page-nav">
<a href="index.php?page=<?php echo $page ?>"></a>
</nav>
</div> <!-- END Container -->
当按降序 [ORDER BY 1 DESC
] 排序时,所有这些代码都可以正常工作。我想我需要在此代码中添加一些新内容。
脚本.js:
$(function() {
var $container = $('#container');
$container.imagesLoaded(function(){
$container.masonry({
gutter: 10,
itemSelector: '.item',
});
});
$container.infinitescroll({
// infinite scroll options...
navSelector : "#page-nav",
nextSelector : "#page-nav a",
itemSelector : ".item",
loading: {
img: 'http://i.imgur.com/6RMhx.gif',
speed: 0,
}
},
function( newElements ) {
var $newElems = $( newElements ).css({ opacity: 0 });
$newElems.imagesLoaded(function(){
$newElems.animate({ opacity: 1 });
$container.masonry( 'appended', $newElems, true );
});
}
);
});
最佳答案
传递一个参数给mysql rand https://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_rand
If a constant integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values.
像这样(未测试:))
if(!isset($_SESSION["rand"])) // generate random number if none
{
$_SESSION["rand"] = rand();//generate random number
}
$rand = $_SESSION["rand"];
$query = "SELECT * FROM data ORDER BY rand($rand) LIMIT $start_from, $per_page";
关于jquery - MySQL 随机函数的无限滚动问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973286/