Php 从动态MySql表的第n行开始获取m行
场景是列出用户和他的朋友按上传日期时间排序上传的照片。我有一张MySql表格照片,它是动态的,包含所有用户上传的照片 最初,我通过下面的查询得到10行数据。当我获得下10行时,用户将上传更多照片。那么,如何从我之前得到的行开始选择接下来的10行呢Php 从动态MySql表的第n行开始获取m行,php,mysql,database,Php,Mysql,Database,场景是列出用户和他的朋友按上传日期时间排序上传的照片。我有一张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 uld
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;
您的数据库中一定有一些自动递增的主键。假设您正在按相反的顺序获取记录,。假设您在开始显示结果时有50条记录
你的记录从50到41
意味着又插入了5条记录,所以你的最后一个Id从50增加到55
现在,不再显示最后20条记录,取回主键<41的最后10条记录,因此它将为您提供40到31条记录,而与同时插入的记录无关
因此,您的查询将更新为
选择*来自照片p,其中p.handle在选择handle from friends中,其中user='$handle'或p.handle='$handle'和photo。[照片表的primarykey]<[到目前为止显示的最后一张照片id]按uldatetime描述限制0,10排序
将[last photo id displayed to now]和[primarykey of photo table]替换为相应的变量和字段。@b0s3 Yeah,即使我这样做了。有机会获得我已经得到的行。这不是通过数据库引擎可以解决的问题。为此,您必须在会话中保持跟踪,并根据您选择的ID记住最后一张照片。然后,您可以添加另一个WHERE子句,仅选择ID更高的照片。@arkascha谢谢!嗯,通过这种方法,我第一次得到数据,最后一张照片的id是999999。你能给我一个更好的建议吗?第二次发送last photo id=999999-10,然后第三次发送last photo id=999999-20,依此类推