从mysql数据库社交网站重新发布帖子

时间:2013-10-02 07:55:49

标签: php mysql mysqli mysqli-multi-query

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

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

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

3 个答案:

答案 0 :(得分:0)

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

作为用户,我宁愿退出该服务。坦率地说,我讨厌这样一个太聪明的服务,决定我要看哪些帖子,哪些不是。甚至动态排序。

按日期排序,按感兴趣的标签,通过合理,可靠和恒定的东西进行排序。

答案 1 :(得分:-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

答案 2 :(得分:-1)

如果您存储时间&amp;当用户第一次在会话中发出请求时,您可以使用它来过滤帖子表。

因此,第二页结果的SQL将与

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

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

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