2012-07-21 153 views
1

我有一個表格,其中列id,user_id,post_id, like, views。當用戶點擊Like按鈕時,一行將被添加到相應的user_idpost_id表中,並且like將被設置爲1。如果該行已經存在並且like列已經是1,則什麼也不會發生。使用帶有2個密鑰的重複密鑰更新

當用戶訪問特定頁面,一行將被添加到表與相應的user_idpost_id,並view將被設置爲1。但是,如果該行已存在,則view中的值將遞增。

問題:我嘗試使用INSERT INTO mytable ... ON DUPLICATE KEY UPDATE like = 1,但表的主鍵是id和不user_idpost_id。如果我將主密鑰設置爲user_idpost_id,則會出現問題,因爲如果存在具有相同user_idpost_id的行,則只會複製該行。

在這種情況下,應該如何構建查詢?

或者更好的情況是將表格拆分成2個表格,一個用於likes,另一個用於views。如果是這種情況,我仍然需要根據user_idpost_id這兩列設置唯一的行。

或者做多個SQL查詢?

請指教,謝謝!

回答

0

我建議你有一個喜歡的表,然後在任何表,你保留的職位,你添加一排意見。因此,無論何時查看該帖子,只需更新該帖子的視圖值即可查看=查看+ 1.

現在要解決您列出的關於主鍵的問題,您應該注意,您可以使用唯一鍵在這種情況下,它可以應用到多列,並解決您遇到的問題。因此,舉個例子,如果在你的場景中你有一個包含了userid和postid的唯一鍵值,那麼你的數據庫將不允許該表格中具有相同userid和postid的兩個不同的行。

所以,以供將來參考,使用唯一的關鍵,如果你需要:)

+0

所以我創建兩個'user_id'和'post_id'列的唯一鍵,主鍵仍然是'id'? 'ALTER TABLE''喜歡''ADD ADD UNIQUE( \'user_id \', \'post_id \' );' – Nyxynyx 2012-07-21 21:08:04

+0

正好!如果需要,您可以擁有唯一的密鑰和主鍵 – 2012-07-23 19:03:18

0
  1. 丟棄id作爲主鍵
  2. 使用兩個表
  3. 使上(USER_ID,POST_ID)主鍵
  4. 當手柄插入件等,做一個刀片忽略
  5. 當手柄插入視圖,做一個插入..重複密鑰更新視圖=視圖+ 1