2013-09-21 46 views
0

我有一個表dislikes它包含兩列,idoneidtwoSQL布爾關係

這些是來自用戶的唯一ID,例如:

| idone | idtwo | 
----------------- 
| 5 | 4 | 

這意味着,與id=5用戶不喜歡用戶與id=4。我在PHP中有一個數組,其中包含當前用戶選擇不喜歡它們的所有用戶的ID。

所以說dislikes={1,2,3},這意味着當前用戶不喜歡用戶1,2或3.數據庫中有未知數量的用戶。

因此,如果用戶1選擇不喜歡用戶2和用戶3(這是通過HTML下拉菜單完成的),我會將dislike={2,3}傳遞給處理此數據的PHP頁面。

我想PHP頁面然後添加條目(1,2)(1,3)。這是第一個問題,我如何才能確保只添加唯一條目?

也說,用戶1改變了他不喜歡的用戶2.然後我通過dislike={3}到PHP頁面,並必須以某種方式刪除所有條目(1,!3),即所有條目,其中用戶1不喜歡任何人,除非用戶3.我怎樣才能事實做到這一點?或者,還有更好的方法?

+0

顯示你的代碼...你試了什麼?聽起來不那麼難... – djot

+0

我們在說多少用戶?你能不能總是將完整的不喜歡列表傳遞給php頁面,然後可以刪除該用戶的所有當前記錄,然後添加新的? – Steve

+0

您有幾個選項... 1.刪除所有內容(用戶依賴)並重新寫入當前有效。 2.使用(如已經建議的)'REPLACE INTO'。 3.「INSERT INTO ... ON DUPLICATE KEY UPDATE」...也許還有其他一些選項我錯過了...... – djot

回答

0

由於您使用的MySQL最簡單的事情可能是使用REPLACE INTO而不是INSERT與一對列(idone,idtwo)上的主鍵或唯一索引。

另外,在更新,你可以運行,做的任何一個交易:該用戶

  • 刪除現有的行,加上所有的行,提交
  • 選擇現有的行,從刪除的行你本地設置,你會複製,只添加新的行,提交
+0

我明白了,我從來不知道「REPLACE INTO」,但同時我也需要擺脫所有其他不再不喜歡的條目。那麼最好的辦法不是做出答案的第一個選項嗎? – Bob

+0

@Dan:是的,如果你還需要刪除行,那麼在我看來,最簡單的事情就是刪除所有行,並添加你知道的行。確保您使用交易。 –

+0

原諒我的天真,但什麼是交易? – Bob