2017-07-04 127 views
-1

我正在爲客戶端應用設計一個'http api',它關於評論,情況是如果應用用戶登錄,他可以喜歡一些評論,而不像他們,但他們不會喜歡兩次或更多次,所以每當應用程序從我的'http api'獲取評論數據時,數據應該能夠告訴客戶端應用程序該評論是否已被用戶所喜歡。 好吧,我最近實施的API,但我發現它工作得不好,我的設計是:如何檢查用戶是否已經評論了

插入: 我創建節約評論一表「評論」(內容,創建時間等)一個用於應用用戶的桌子'用戶'和一個用於記錄哪個用戶喜歡哪個評論的信息的表'Like' 當用戶喜歡評論: 1時,增加表'comment'中的記錄'like_counts' 2,插入表中像設置用戶='用戶'和評論='評論'

查詢:

  1. 查詢從MySQL的評論列表(約20條每一頁)
  2. 的foreach非常評論和查詢表等,其中評論==「評論」和用戶=「用戶」
  3. 如果查詢結果在步驟2中存在,這意味着用戶之前喜歡評論。

的事情是當客戶端得到一個頁面,意味着我必須執行20個查詢與表「喜歡」來檢查,如果用戶收到喜歡它的意見,那將是非常糟糕的設計,我認爲。我知道我可以使用一些緩存,比如Redis,下一步,我想知道什麼是mysql方式的好方法?

+0

在您的查詢中使用「LEFT JOIN」可在您收到評論的同時從用戶的「Like」表中獲取信息。 – Barmar

+0

感謝您的回覆,Barmar先生,LEFT JOIN將保存我的查詢數量,這可能是最有效的工作方式,非常感謝。順便說一句,是不是在這種情況下常見的做法?^ _^ –

回答

0

我想這些評論存儲在一個表中,並且因此會有一個comment_id。

與具有user_id的用戶相同。

喜歡的內容存儲在名爲Likes的表中,並且有兩列:user_id和comment_id。既作爲評論表和用戶表的外鍵。

他們一起構成表中的主鍵喜歡。從而防止重複。

如果用戶123想要再次評論1000,則會導致123-1000組合的重複鍵錯誤。 因此,在插入之前,您的應用程序不需要檢查:插入將會失敗。在您的應用程序中,識別該錯誤消息並給出錯誤消息的任務

+0

是的,它會自動定義壞'喜歡'時插入表「喜歡」,但nouse查詢... –

+0

我明白你需要這個知道插入是否被允許的信息。但是你還需要它在每個長列表中的記錄?如上面Barmar所建議的那樣,左連接就是這樣 –

相關問題