具有新结果可能性限制的MySQL查询结果偏移量?

时间:2013-09-08 11:22:41

标签: php mysql sql web-applications feed

我正在使用一个使用20左右的滚动加载系统的应用程序,当您滚动时,结果一次加载到一个Feed中。此Feed包含不断添加的用户生成内容。这意味着每个查询的结果集可以更改为X.

因此,假设我们加载20个结果,然后滚动,另外20个,然后在滚动更多以加载下一个20之前,另一个用户上传了一段新内容,这有效地在下一组20中呈现重复Feed的结果是因为我们使用OFFSET来获取其他结果,并且总结果集会因为添加了符合查询条件的新内容而变为1。

最好和最有效的方法是什么?我们已经涉及在where条件中使用行的id以防止重复结果,并且仅对于获取的新结果仅使用不带偏移的限制..所以我们可以做WHERE id< 170 LIMIT 20,WHERE id< 150 LIMIT 20,WHERE id< 130 LIMIT 20等,以控制和防止重复...但是,这并不适用于所有可能的情况,因为我们的结果集并不总是与DESC订购的id列一起订购..

Soo ..还有其他选择吗?..

2 个答案:

答案 0 :(得分:0)

您可能想尝试数据库解决方案。在初始请求中,创建并填充表。将该表用作Feed。

确保tablename以一致的内容开头,例如TableToFeedMyApp,并以保证使其唯一的内容结束。然后设置一个预定作业,以查找并删除所有这些早于您认为是某个间隔的表创建的表。

答案 1 :(得分:0)

为什么使用where子句而不是limit使用offset选项? Limit可以有两个参数。 offset参数似乎完全符合您的要求。例如:

limit 100, 20

从第101行开始占用20行。然后:

limit 120, 20

从第121行开始占用20行。 (在MySQL计数中,偏移量从0开始,而不是1。)

您需要做的一项改进是确保记录的排序顺序为稳定。基本上,稳定排序是没有具有相同值的排序键的排序。要实现此目的,只需将id列设置为排序中的最后一列。它是唯一的,因此如果有任何重复的排序键,那么添加id会使排序稳定。