MySQL随机函数的无限滚动问题?

时间:2015-04-30 16:39:46

标签: jquery mysql jquery-masonry infinite-scroll masonry

我在砌体库中使用jQuery infinite-scroll插件。我的问题是当按随机ORDER BY rand()排序时,无限卷轴中的重复记录加载。

例如:如果我已将10张图片添加到数据库,

  • 正在加载主页 - 1 5 3 4 2 随机加载五张图片
  • 加载第二页 - 6 2 9 8 5 2和5再次加载
  • 没有7和10
  • 达到了END

的index.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 -->

按DESCENDING [ORDER BY 1 DESC]排序时,所有这些代码都没有任何问题。我想我需要为这些代码添加新内容。

的script.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 );
        });
    }
);

});

1 个答案:

答案 0 :(得分:1)

将参数传递给mysql rand https://dev.mysql.com/doc/refman/5.1/en/mathematical-functions.html#function_rand

  

如果指定了常量整数参数N,则将其用作种子   value,它产生可重复的列值序列。

像这样(未经测试:))

    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";