2011-10-08 73 views
5

僅供參考,這裏是SO一個問題,我問最近,是有關這個問題:How to model Friendship relationships在社交網絡環境中,檢查全球友誼最簡單的方法是什麼?

關於這個問題,我們想出一個辦法只有張貼好友可以顯示新聞源項目。但是,我需要的是關於如何以更動態的方式檢查友情的建議,以便它可以用於多個網站功能。

例如,我剛剛安裝了評論系統,允許用戶在新聞帖子上發表評論。但是,這不僅限於朋友,它應該是(後來應該由帖子的作者選擇)。

僅由朋友發佈新聞項目稍有不同,因爲我直接從數據庫獲取數據,並且使用SELECT子查詢僅獲取當前用戶的朋友的帖子。但是,在評論的例子中,如果該人是朋友,我只想顯示評論帖子表單。我實際上並沒有從數據庫中提取任何東西來挑選,排序和顯示。

知道這樣的問題會在整個網站上出現很多次,檢查友誼最簡單的方法是什麼? 我可以以某種方式將所有朋友的用戶ID從數據庫中提取到某種會話數組中,然後每當我需要確定相關人員是否是當前登錄用戶的好友時,都會執行一個if(in_array($friends))關閉我的頭頂,這聽起來像它會正常工作,但我希望你的輸入第一。

我上面鏈接的問題解釋了我的友誼表是如何工作的,以幫助您解決這個問題。

+0

'MY_DATA_ACCESS_LAYER.IS_FRIEND(my_id,other_id)' - 使用數據庫。喜歡數據庫。以後擔心「其他的東西」。 (一個微不足道的擴展是使它能夠同時處理多個ID;重點是:如果它隱藏在DAL中,那麼它無關緊要,而且當真的* if * - performance *是* an時問題有很多方法來處理它。) – 2011-10-08 03:14:46

+0

@pst,你介意給我解釋一下好嗎? 「MY_DATA_ACCESS_LAYER.IS_FRIEND(my_id,other_id)」究竟是什麼?我將如何使用它?你能提供一個例子嗎? – vertigoelectric

+0

它是DAL(數據訪問層)的一部分,將「使用數據庫」。這個名字很殘酷,被選中脫穎而出。不同的框架將促進不同的DAL方法,但它聽起來像已經存在:也就是說,*不要擔心會話或in_array的東西。只有在經過驗證的性能用例不能滿足要求時才擔心「限制小數據庫的使用」。 – 2011-10-08 22:42:41

回答

0

實際上,在會話中存儲好友數組是非常糟糕的主意。如果在會話變量創建後添加新朋友,會發生什麼情況?它不會在會話中更新。

由於您將在同一頁面上多次查看朋友列表,爲何不查詢並將其存儲在本地數組中,您可以在同一頁面上繼續使用它。

當頁面執行完成時,數組將被丟棄。

所以基本上,你只會查詢一次列表。

推薦的實現方式是遵循上述評論中的「pst」的建議,並且每次需要首先查找關係時都要進行查詢,因爲這很容易實現。之後,當查詢速度開始成爲問題時,只需更改該方法的內部即可在本地數組中緩存好友列表,以便加快速度。 (交換處理器使用的內存使用量)。

+0

感謝您的回覆。那麼,就像現在一樣,我有一個查詢來檢查兩個用戶之間現有的有效匹配的「友誼」表。如果找到的行數不爲零,則確定友誼。要使用本地數組方法,我需要更改我的查詢以從表中抽取所有有效的友誼匹配項,然後對此進行測試。我現在意識到陣列的想法效率不高。然而,它提出了我的問題。是否會出現過於頻繁查詢數據庫的問題,或者這並不重要? – vertigoelectric

+0

我認爲這是數據庫查詢越來越便宜,cpu功率越來越便宜。基本上,電腦的功能每天都在變得更便宜。 所以你應該關心的第一件事是做正確的事情。先讓它使用正確的邏輯。然後看看它是否需要優化。 如果它沒有任何優化運行速度快,那麼你只需要節省很多時間。 如果它運行顯示,至少您的代碼很容易被任何人理解,因爲沒有奇怪的邏輯來嘗試加速代碼。它將使代碼更易於維護和優化。 – iWantSimpleLife

+0

您很可能需要編寫代碼,然後將其與實際情況進行比較,然後您可以決定查詢次數是否過多。但根據經驗,我試圖停止每個PHP頁面50個查詢。 – iWantSimpleLife

相關問題