codeigniter と mysql を使用して、Android でイベントを共有するためのアプリを構築しています。私がやろうとしているのは、制限付きで Android アプリにイベントのリストを表示することです。たとえば、クエリごとに 10 件の結果しか表示できず、後で「さらに読み込む」タスクを実行できます。
Twitterのタイムラインについて話す場合、ステータステーブルに次の列があるとしましょう(PSはこれらを作成しました):
- id (これは自動インクリメントの主キーであると考えてください)
- date_post
- つぶやき
ユーザーがツイートを投稿すると、id には次の自動インクリメント値が自動的に割り当てられ、datetime 列には現在の時刻が割り当てられるため、ツイートは適切に並べられ、新しいツイートが大きな id に挿入されます。これで、読み込まれるたびに制限 20 の結果でタイムラインを表示し、古いツイートから新しいツイートへと読み込むには、次のクエリ (CMIIW) を使用できます。
SELECT * FROM TWEETS WHERE ID > last_id_loaded AND date_post >= last_date_loaded ORDER BY ID ASC LIMIT 20;
last_id_loaded は、最後に読み込まれたツイートに基づいて送信するパラメーターです。初めての場合は 0 で、last_date_loaded パラメーターと同じです。
それでは、私のアプリに戻りましょう。次の列を持つ events というテーブルがあります。
- id (主キー、自動インクリメント)
- 名前(イベント名)
- date_start (イベントが開催される日時)
- 等
ユーザーがイベントを作成すると、id には自動インクリメントの次の値が割り当てられますが、前に述べたツイート テーブルとは異なり、イベントは日時に基づいて並べ替えられません。大きな id は新しいイベントを意味するわけではなく、その逆も同様だからです。例えば :
----- | ----------- | -------------
id | name | date_start
----- | ----------- | -------------
1 Event A 2013-05-26 13:13:00
2 Event B 2013-05-23 09:00:00
3 Event C 2013-05-27 10:00:00
4 Event D 2013-05-27 10:00:00
5 Event E 2013-05-27 10:00:00
6 Event F 2013-05-28 08:00:00
7 Event G 2013-05-31 13:13:00
8 Event H 2013-05-29 09:00:00
9 Event I 2013-05-29 08:00:00
10 Event J 2013-05-30 13:13:00
date_start 列に基づいて並べ替えると、イベント B、イベント A、イベント C、イベント D、イベント E、....、イベント G のようになります。
ご覧のとおり、同じ date_start 値を持つ 3 つの列があります: イベント C、D、および E。イベントを古いものから新しいものへとロードしたい場合、クエリごとに 3 つのみの制限があり、イベント B を返すことが期待されます。 A、C、現在、次のクエリを使用しています。
SELECT * FROM EVENTS WHERE DATE_START >= last_date_retrieved ORDER BY DATE_START ASC, ID ASC
しかし、次のクエリがその後の次の値になることを確認するにはどうすればよいですか? 前のクエリが結果として得られることを意味します:最後のdate_startが2013-05-27 10:00:00のB、A、C
前のクエリを使用すると、期待どおりの D、E、および F ではなく、C、D、E が返されます。
ここで何が欠けていますか?私はいくつかのアドバイスを得る準備ができています。ありがとうございました。