2014-01-10 68 views
1

我目前正在开发一个个人php网站。我们有一个页面,通过分数和日期排序显示不同的项目。每个用户都可以“投票”每个项目(+1,-1)。此页面一次显示10个项目,并且有一个“加载更多”按钮可获取以下项目。每次触发“加载更多”功能时,我都会运行一个查询来获取下10个项目。要做到这一点我运行这种查询实现“加载更多”功能

SELECT * FROM items ORDER BY score DESC, date_added DESC LIMIT '.$count.', 10

鉴于用户可以增/减项的得分,它可能是同一个项目可以询问第二次(在“负载更多“触发器)。

我能做些什么来解决这个问题。我正在考虑表格的快照,然后获取保存的数据,即使它是旧数据。

+0

如果单击加载更多,您应该正在加载下10个项目,所以你不应该有重复的项目。 –

回答

3

你可以保存已发送entrys的列表(在临时表),并使用

WHERE ID NOT IN(SELECT ID FROM already_sent其中USER_ID = $ UID)

这一个非常快速和肮脏的解决方案,它不能很好地满足很多请求,但我不知道一个好的解决方案,它可以满足您的需求。另一个解决方案是预取整个结果并为特定的一组请求安全,但是这种解决方案可能会限制您的页面的最大结果(例如,像9gag那样)

+1

我也会用'WHERE col NOT IN'去。也许可以通过不进行子选择来提高性能,但可以获取并传递将要手动排除的ID。 – thpl

+1

但是,当列表变得越来越大并且有多个请求时,这将在web服务器和MySQL之间使用很多带宽。在这种情况下,我认为服务器上的MEMORY引擎表会更加高效。但我也只能说这整个解决方案对我来说似乎非常难看;) – th3falc0n

+0

9gag在一页上达到最大值时会做什么? – jajex