如果你肯定有最多5個標籤,包括他們在表中作爲tag1,tag2,tag3,tag4,tag5肯定是「最簡單的」。爲了更加簡單,您可以更新所有5個值,因此標籤3,4,5將保存爲tag1,tag2,tag3,tag4和tag5保存爲NULL。顯然它不是可擴展的 - 你絕對不想用大量(或可能無限制)的標籤來做到這一點。
下一個最簡單的方法是刪除所有並重新插入,但它不是特別優雅。
我能想到的最優雅的方式是運行兩個查詢。第一個將刪除不是您新的一組標籤的所有內容。我已經擴展您的示例以顯示添加兩個替換標記:(3,4,5,6,7)
。 接下來會插入所有新標籤,但會根據TagID和ItemID的UNIQUE組合索引忽略重複項。
#This creates the table and UNIQUE index, so you can understand how the next queries work
CREATE TABLE `taglinks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ItemID` int(11) NOT NULL,
`TagID` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `Linkindex` (`ItemID`,`TagID`)
);
#This inserts example data
INSERT INTO `taglinks` (`ItemID`, `TagID`) VALUES (1,1),(1,2),(1,3),(1,4),(1,5);
#This removes tags 1 and 2
DELETE FROM `taglinks` WHERE `ItemID` = 1 AND `TagID` NOT IN (3,4,5,6,7);
#This adds two new tags (6 and 7). Tags 3, 4 and 5 are unaffected
INSERT IGNORE INTO `taglinks` (`ItemID`, `TagID`) VALUES (1,6),(1,7),(1,3),(1,4),(1,5);