我有一個友誼用戶之間的表,看起來像這樣。MYSQL插入或更新,如果存在一個單向複合主鍵表
CREATE TABLE user_relations (
pkUser1 INTEGER UNSIGNED NOT NULL,
pkUser2 INTEGER UNSIGNED NOT NULL,
pkRelationsType TINYINT UNSIGNED NOT NULL,
PRIMARY KEY(pkUser1,pkUser2),
FOREIGN KEY(pkuser1) references users(ID),
FOREIGN KEY(pkuser2) references users(ID),
FOREIGN KEY(pkRelationsType) references user_relations_type(ID)
);
pkRelationsType
是指向定義的那種關係的用戶具有另一表(友誼(1),待處理(2)或阻斷(3))
如果用戶1是朋友與用戶2我只有一個實例|1|2|1|
和不也|2|1|1|
。
事情是,爲了阻止用戶,我必須牢記已經可以建立關係(用戶可能已經是朋友,甚至有待處理的友誼請願),所以我試圖插入數據或更新如果關係不存在。
我有這樣的友誼請求發送,但如果數據已經存在,這恰恰忽略了插入。
INSERT INTO
user_relations(pkUser1,pkUser2,pkRelationsType)
SELECT * FROM (SELECT :sender0,:target0,2) AS tmp
WHERE NOT EXISTS
(SELECT pkUser1 FROM user_relations
WHERE
(pkUser1= :sender1 AND pkUser2=:target1) OR (pkUser1=:sender2 AND pkUser1=:target2) LIMIT 1)
由於表格的性質,我不能使用INSERT ... ON DUPLICATE KEY UPDATE
。
我一直在想如何處理它與PHP,尋找關係,它的順序,如果存在,然後做一件事或另一件事,但它似乎是一個浪費處理。
請注意,儘管我已經處理了自己,但我不是MYSQL專家。 希望我已經很好地解釋了我自己。
感謝您的反饋意見。
如果您不能使用'ON DUPLICATE KEY UPDATE',那麼您需要決定是否可以使用'INSERT'或'UPDATE',如果您希望多個操作完成服務器端,可能需要一個[存儲過程](http://dev.mysql.com/doc/refman/5.5/en/stored-routines.html)。 – Orbling