从动态MySql表的第n行开始获取m行


Get m Rows starting from nth row in dynamic MySql table

这个场景是列出一个用户和他的朋友上传的照片,按照上传日期时间排序。我有一个MySql表照片,这是动态的,包含所有用户上传的照片。

最初,我通过下面的查询得到10行数据。当我得到下一个10行的时候,用户将上传更多的照片。那么我如何从我之前已经得到的行开始选择接下来的10行呢?

select * from photo p where p.handle in (select handle from friends where user = '$handle') or p.handle='$handle' order by uldatetime desc limit ".$start.", 10;

您的数据库中必须有一些Auto increment primary key。假设你取记录的顺序是倒序的。假设当您开始显示结果时,您有50条记录

  1. 您从50到41获取记录
  2. 同时又插入了5条记录,因此您的最后Id从50增加到55
  3. 现在不是显示最近20条记录,而是获取具有主键&lt的最近10条记录;因此,无论在平均时间内插入的记录如何,它都会给您40到31。

所以你的查询将被更新为

select * from photo p where p.handle in (select handle from friends where user = '$handle') or p.handle='$handle' AND photo.[primarykey of photo table] < [last photo id displayed till now] order by uldatetime desc limit 0, 10;

用各自的变量和字段替换[last photo id displayed till now][primarykey of photo table]