从 mysql 数据库社交网站重新请求帖子


Rerequesting posts from mysql database social network site

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

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

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

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

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

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

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

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

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

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

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

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

因此,第二页结果的SQL将遵循以下行:

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

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

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