【发布时间】:2016-05-29 18:19:32
【问题描述】:
我有一个从 mySQL 输出的列表,其中包含 20 个项目。
用户将添加和删除进入列表的项目,因此项目的 ID 不连续。它们可能是 5、10、12、13、14、27、28、31、38、40。列表仅限于 20 项。
SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10
当此列表显示在屏幕上时,用户将继续添加和删除项目。我这里的例子中最后一个id的值是40。
其中一些项目可能会被删除,并且会添加新项目。
如何从最后一个已知 id 开始重新运行此查询。我是否添加了 WHERE ID > 40。我可以将 WHERE 子句放在 LIMIT 0,10 子句之后。
SELECT * FROM table WHERE fields = vars ORDER BY id DESC LIMIT 0,10 WHERE id > $lastid
这里的要点是我不想显示已经显示的项目,并且我不知道项目是否已被删除,因此执行 1,10 可能会导致错误的结果。我需要紧跟最后一个显示项目之后的下 10 个结果。
【问题讨论】:
-
我认为您不应该担心已删除的项目。根据项目的修改来控制是否应该显示项目将是一个真正的痛苦。您应该坚持 id 的顺序并为每个页面修复一些元素。然后您只需要使用
LIMIT子句控制这些值。始终以LIMIT 1, 10开头,10是页面的元素数,下一页将是 1+10,10 即LIMIT 11,10。所有的分页都是这样工作的。控制应该显示的内容将涉及给您的系统增加不必要的复杂性,例如 cookie、其他表格 -
还有一个糟糕的逻辑来检查每个看到列表等等的用户,每个用户在分页中前进和后退的每一步。
-
我没有将其添加为答案,因为这是一种意见,尽管知道这是几乎所有系统的默认行为。
-
我完全了解分页,我让它在几个搜索页面上运行。这是一个附加在项目屏幕下方的列表,并在列表底部附加了一个链接,我想添加一个滚动触发器,以便当用户点击页面底部时,它会自动启动附加。我不能让项目重复,因为以前的项目已被删除。
-
所以,说这不是一个糟糕的逻辑,它的用户界面要求是向下滚动屏幕,而不是在页面之间来回切换。
标签: mysql