【问题标题】:Get m Rows starting from nth row in dynamic MySql table从动态MySql表中的第n行开始获取m行
【发布时间】:2015-10-08 07:50:23
【问题描述】:

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

最初我通过以下查询获得 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;

【问题讨论】:

  • @b0s3 是的,即使我这样做。有机会获得我已经获得的行。
  • 这不是您可以通过数据库引擎解决的问题。为此,您必须在会话中跟踪并记住您选择的最后一张照片(通过其 ID)。然后,您可以添加另一个 WHERE 子句,仅选择具有更高 ID 的照片。
  • @arkascha 谢谢!

标签: php mysql database


【解决方案1】:

您的数据库中一定有一些Auto increment primary key。并说您正在以相反的顺序获取记录。假设您开始显示结果时有 50 条记录

  1. 你获取了从 50 到 41 的记录
  2. 平均在插入 5 条记录时,您的最后一个 ID 从 50 增加到 55
  3. 现在不是显示最后 20 条记录,而是获取最后 10 条主键

因此您的查询将更新为

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] 替换为相应的变量和字段。

【讨论】:

  • 嗯,通过这种方法,我第一次获得数据,最后一张照片 id 为 999999。你能建议我更好的方法吗?
  • 第二次发送最后一张照片 id = 999999-10 然后第三次发送最后一张照片 id = 999999-20 以此类推
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 2016-09-10
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2021-03-29
相关资源
最近更新 更多