2014-01-10 69 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