1

わかりにくいので、この質問にどのようにタイトルを付けるかわかりませんでした。

ブログ投稿を格納するデータベース テーブルがあり、AJAX を使用して、ページ上でこれらのブログ投稿の無限スクロールを作成しています。最初にページにアクセスすると、最新の 10 個のブログが表示されます。

$startMySQL クエリに変数と変数を使用$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、すべてのブログを返すようにしていますが、データベース内の最後のブログに対して無限ループが作成されます。を削除すると、無限ループに=<=なりませんが、最新のブログはスキップされます。

無限ループを引き起こすことなく、最新のブログを含め、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 に答える