我正在构建一个应用程序,用于使用 codeigniter 和 mysql 在 android 中共享事件。我想要做的是在 android 应用程序中显示一个有限制的事件列表,假设每个查询只有 10 个结果,然后我可以执行“加载更多”任务。
如果我们谈论 twitter 时间线,假设状态表有以下列(PS 我编了这些):
- id(考虑这是具有自动增量的主键)
- date_post
- 鸣叫
如果用户发布一条推文,id 自动分配下一个自动增量值,日期时间列分配当前时间,因此推文排序正确,新的推文将插入更大的 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(活动举行的日期时间)
- ETC
当用户创建事件时,id 将分配下一个自动增量值,但与我之前提到的 tweets 表不同,事件不是基于日期时间排序的,因为更大的 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 列排序,应该是:Event B, Event A, Event C, Event D, Event E, .... , Event G。
正如我们所看到的,有 3 列具有相同的 date_start 值:事件 C、D 和 E。如果我想将事件从旧事件加载到新事件,每个查询的限制仅为 3,我希望返回事件 B, A,C,目前我使用以下查询:
SELECT * FROM EVENTS WHERE DATE_START >= last_date_retrieved ORDER BY DATE_START ASC, ID ASC
但是,我怎样才能确保下一个查询会产生下一个值呢?我的意思是前面的查询是结果: B, A, C with last date_start is 2013-05-27 10:00:00
如果我使用前面的查询,它将像我预期的那样产生 C、D、E,而不是 D、E 和 F。
我在这里想念什么?我准备得到一些建议。谢谢你。