2013-10-02 45 views
0

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

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

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

+0

Facebook有没有解决它?根据我的经验,在facebook新闻中没有任何订单。你从来不确定帖子的顺序,也不知道你是否已经显示出某个帖子。 –

+0

Facebook曾经这样做,虽然它默认为一些相当无用的排序顺序,但现在仍然有一个选项可以按照发布时间进行排序(并非总是那么做) – Kickstart

回答

-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 
+0

这是常见PHP用户对货物崇拜态度的惊人例子。即使邮政明确表示没有身份证参与,他们也不会想到任何其他领域的命令。 –

+0

远离它。存储单个关键字段实际上不需要存储(一定大小的int),并且应该是有效的并且避免具有相同时间戳的2个帖子的问题。该帖子在哪里明确表示不涉及id? – Kickstart

+0

据我所知,您的解决方案仍然不会解决问题。相反,读取查询将需要更多时间在mysql数据库中。 –

-1

当用户第一次使一个在会话中请求,您可以使用它来过滤帖子表。

所以你对结果的第二页SQL会沿着其中$ timefirstseen从会话变量加载的

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

线。这将限制您的结果仅限于用户访问开始时存在的帖子。

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

+0

但是在这种情况下,我将放弃必须到达顶端的热门帖子,这就是在帖子表中维护“偏好”字段的原因。 –

+0

您仍然可以保留已用于排序帖子的相同“ORDER BY” - 实际上您必须 - 但通过筛选“发布日期”字段,您只需确保不显示同样的一组职位再次。 – danielpsc

+0

感谢您的解决方案。我知道了。它会工作。 –

0

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

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

通过感兴趣的标签,按照明智,可靠和恒定的内容对其进行排序。

+0

但是流行的事情和你周围的事情呢?你不知道你什么时候会活跃,你想在你的主页上找到有趣的信息。 –

+0

好吧,我个人特别讨厌“流行”的东西。人们通常的兴趣是虚荣和虚荣。所以,我更喜欢喜欢**我**的东西,而不是来自世界另一边的一些11岁的女孩。甚至我的朋友的兴趣对我来说也是没有用的。 –

+0

我真的很感激你的需求,但社交网络并非只针对单身人士。如果我们考虑在这个世界上,大多数用户希望在更少的时间内避免他们主页上的浪费帖子。考虑到一个有用的社交网络,它应该始终有一个选项来在他们的主页上提供受欢迎的帖子。 –