0

我正在做一个社交网络网站项目。我已经创建了数据库和一切。帖子表有一个preference列,它根据帖子从用户那里获得的点赞和评论以及帖子的创建时间来存储偏好值。要从 posts 表中检索用户主页的帖子,我正在使用 join 运行查询,该查询使用preferencecolumn 排序。现在,假设我检索了 10 个要显示在帖子表上的用户的帖子,并且用户向下滚动,并且用户又发出了一个请求,以检索服务器的下 10 个帖子。

如果在这些请求之间,很少有其他用户创建新帖子或数据库中帖子的偏好值在这之间发生变化,现在如果我在服务器上运行第二个请求,则所有帖子都将用于第二个请求(即显示接下来的 10 个帖子),但由于数据库已更新,这意味着在第二个请求中,很可能在第二个请求中检索到前 10 个帖子中的少数几个。

我想知道如何避免这些重复的请求。当他们的数据库是动态的时,facebook 或任何其他社交网络如何在后端解决这个问题。

4

3 回答 3

0

我宁愿完全避免这种不可靠的排序方式。

作为用户,我宁愿退出该服务。坦率地说,我讨厌这种太聪明的服务,它决定了我必须看到哪些帖子,哪些不看。甚至在此之上动态排序。

让它按日期、兴趣标签、合理、可靠和恒定的东西排序。

于 2013-10-02T09:17:12.200 回答
-1

在您的脚本中存储返回的行 id 的记录。

例如,使用基本限制并在第一次选择完成时仅存储最新的 id,并使用页码来确定要返回的记录的限制。

SELECT id, somefield
FROM SomeTable
WHERE id < $SOMESTOREDVALUE
LIMIT $PAGENUMBERTIMESTEN, 10

或在返回每个页面后存储最新的 id(每次运行时都需要存储)

SELECT id, somefield
FROM SomeTable
WHERE id < $SOMESTOREDVALUE
LIMIT 0, 10
于 2013-10-02T08:56:46.613 回答
-1

如果您存储用户在会话中首次发出请求的时间和日期,您可以使用它来过滤帖子表。

因此,第二页结果的 SQL 将类似于

SELECT <some fields> FROM <sometables> 
WHERE DatePosted <= $timefirstseen LIMIT 10, 10

其中 $timefirstseen 是从会话变量中加载的。这会将您的结果限制为仅在用户访问开始时存在的帖子。

您当然需要包含一个功能,以允许用户清除会话或在他们重新访问其主页时自动执行此操作,以确保他们最终能够看到新帖子!

于 2013-10-02T08:58:07.850 回答