【问题标题】:Infinite-scroll issue with MySQL random function?MySQL随机函数的无限滚动问题?
【发布时间】:2015-04-30 16:39:45
【问题描述】:

我在砖石画廊上使用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 );
        });
    }
);

});

【问题讨论】:

  • 您要处理多少张图片?如果您可以在客户端中随机发送 all 和 splice 数组将相当简单,否则您必须跟踪发送的内容并相应地修改查询
  • 每页 18 张图片,数据库中超过 100 张。
  • 在 json 数组中发送一次所有图像数据,然后将随机逻辑移动到客户端。在填充 DOM 时从数组中删除...不会重复
  • 我还是有同样的问题。请你能用一个小代码示例来回答这个问题来检查我的代码吗?感谢您的 cmets @charlietfl 谢谢。

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


【解决方案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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2014-11-19
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多