1

我不知道如何命名这个问题,因为它有点难以理解;

我有一个存储博客文章的数据库表,我正在使用 AJAX 在页面上创建这些博客文章的无限滚动。最初,当访问该页面时,会显示 10 个最近的博客。

我在 MySQL 查询中使用$start$limit变量,所以它知道从哪个博客开始抓取,然后从数据库中抓取多少。我的问题是因为我的 ID 没有按顺序删除博客,所以我不能只做一个标准的SELECT * FROM blogs ORDER BY blog_id DESC LIMIT $start, $limit.

现在我正在做SELECT * FROM blogs WHERE blog_id <= $start ORDER BY blog_id DESC LIMIT $limit它返回所有博客,但它为数据库中的最后一个博客创建了一个无限循环。如果我删除=from<=那么它不会有无限循环,但它会跳过最近的博客。

如何在 SQL 语句中使用$startand$limit子句从数据库中获取所有博客,包括最近的博客,而不会导致无限循环?

编辑:这是执行查询的 JavaScript 代码:

var loading = false;
$(window).scroll(function(){
    var h = $('.post-container').height();
    var st = $(window).scrollTop();

    if(st >= 0.6*h && !loading && h > 400){
        loading = true;
        $('#ajaxLoader').show();
        $.ajax({
            url: "/ajax/blog.process.php?lastid=" + $(".post:last").attr("id"),
            success: function(html){
                if(html){
                    $(".post-container").append(html);
                    $('div#ajaxLoader').hide();
                }else{
                    $('div#ajaxLoader').html('<center>No more posts to show.</center>');
                }
                loading = false;
            }
        });
    }
});

编辑 x2:

如果我像这样切换$start$limit变量,LIMIT $limit,$start那么我开始得到结果,但它们是最旧的结果......我想要通过按降序获取 ID 的最新结果

4

2 回答 2

0

如果 MySQL 中有分析函数,那么您可以使用ROW_NUMBER()非顺序 ID 对行进行排序。然后在 where 子句中使用行号。

这是使用的一般示例ROW_NUMBER()

SELECT * FROM
(
SELECT empno, deptno, ename, sal
 , ROW_NUMBER() OVER (ORDER BY ename) Row_Seq 
FROM scott.emp
)
WHERE row_seq BETWEEN 1 AND 3
/

EMPNO    DEPTNO    ENAME    SAL    ROW_NUM
--------------------------------------------
7876    20    ADAMS    1100        1
7499    30    ALLEN    1600        2
7698    30    BLAKE    2850        3
于 2013-03-15T20:13:34.087 回答
0

所以我无法弄清楚为什么LIMIT $start, $limit不工作的原因,但我能够通过使用这个函数来解决这个问题:

public function getLastBlogId() {
    $sql = $this->mysqli->query("SELECT * FROM blogs ORDER BY blog_id DESC LIMIT 1");

    $row = $sql->fetch_assoc();

    $num = $this->mysqli->real_escape_string(intval($row['blog_id']));
    $num = $num + 1;
    return $num;
}

要获得表中最高的博客 ID,然后向其添加 +1,这样我就不必<=在查询中使用。该=标志是导致无限循环的部分,我需要它来包含最新的博客。因此,为最高博客 ID 添加 +1 将获得低于该 ID 的所有博客,即所有博客。

于 2013-03-15T22:49:57.680 回答