2

データベースから投稿を取得し、レイアウトに DIV を作成して配置する AJAX システムがあります。ユーザーがページの最後に到達すると、他の多くの投稿が API によって読み込まれます。問題は、既に読み込まれている最後の投稿の前の投稿である次の 10 件の投稿を取得するにはどうすればよいですか? 新しい投稿を一番上にロードしたときに同じことをしたいのですが、投稿を見逃したり、投稿を複製したりせずに、すべての投稿を正しい順序で表示するにはどうすればよいですか?

悪い説明と悪い英語で申し訳ありません。

4

4 に答える 4

5

最後に取得したメッセージの ID を保存する必要があります。新しいリクエストを送信するときは、最後に受信したメッセージ ID を送信し、そこから php/mysql に結果を返させます。


クエリが次のようになっている場合:

SELECT * FROM posts WHERE username='redcurley' LIMIT 10

次に、次のように変更する必要があります。

SELECT * FROM posts WHERE username='redcurley' AND id > :id LIMIT 10

代わりに、スコットが言及しているオフセット メソッドを使用することもできます。


編集:非常に一般的であるため、自動インクリメントIDを使用していると思いました。そうではないので、最後に返されたメッセージを追跡する何らかの方法が必要です。これを行うには、毎回同じ順序でレコードを並べ替え、オフセットを使用します。

于 2012-11-20T17:42:02.583 に答える
1

おそらく、クエリで OFFSET を使用できます。これは、ID が順不同である可能性のある結果を取得したい場合でも機能します。もしあなたが持っていたら -

SELECT * FROM posts WHERE username='foo' LIMIT 10

次のクエリは

SELECT * FROM posts WHERE username='foo' LIMIT 10 OFFSET 10

取得するレコードが増えるにつれて、このようになります。Javascript はオフセットを追跡し、AJAX 要求でそれをサーバーに送信する必要があります。

于 2012-11-20T17:44:49.080 に答える
1

最終的に制限があるため、ほぼ無限の結果を許可するには、AUTO_INCREMENT を使用できません。

ただし、投稿時にタイムスタンプを行に追加し、最初のロードではAJAXハンドルコードにタイムスタンプが指定されていないため、それらをすべて取得し、クエリを受信したときにクエリが実行されたタイムスタンプを返信します。その後、別のクエリを使用できますWHERE timestamp > $sentTimestamp

例えば

<?php
// AJAX handler code
$sqlQuery = "SELECT * FROM posts"

if(!empty($_REQUEST['lastPull'])){
    $sqlQuery .= " WHERE `timestamp` > ".mysql_real_escape_string($_REQUEST['lastPull']);
}
// do your query and formatting for AJAX response here
?>
于 2012-11-20T17:58:18.527 に答える
0

ユーザーがページをロードすると、ページのロードで最新の 10 件の投稿をすべて取得できます。

例えば ​​-

ID POST 1 Post1 2 Post2 3 Post3 . . . 10ポスト10

したがって、ユーザーがページの下部をスクロールすると、ajax コードが呼び出され、最後の ID が入力として渡され、SQL クエリで LIMIT を使用してページネーションが行われます。

例 - 私の最後の投稿 ID は 50 で、ユーザーはページを下にスクロールするため、クエリが起動します。id < 50 LIMIT 10 の tableName から * を選択します。

これは古い投稿用です。つまり、新しい投稿がある場合は、ユーザーがページを更新したときに、最後の ID を使用して新しいクエリを使用して新しい投稿を確認できます。Select * from tableName where id > 50 LIMIT 10

これは新しい投稿用です。両方のコレクションを単一のリクエストでページに返します。両方を評価することで、新しい div タグを挿入してこれを表示できます。

ajax と JSON の組み合わせを使用できます。JSON と AJAX の詳細については、ここをクリックしてください。

于 2012-11-20T18:41:42.530 に答える