我有一个item
表,一个tags
表和一个item_tagged
表。
如果在数组中找不到项目,我想从数据库中删除行。
例如:
$array = 'john', 'game', 'nintendo';
项目ID 2在数据库中包含以下标记:
'john', 'game', 'wonderful'
所以应该从数据库中删除'精彩'。
这是什么sql?
item: id, content
item_tagged: item_id, tag_id
tag: id, name
答案 0 :(得分:2)
DELETE FROM `item` WHERE `content` NOT IN ('.implode("','", $array).');
答案 1 :(得分:0)
我猜你正在使用“tagmap”技术。排除方法取决于您的陈述的复杂程度。
查看http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi以了解排除示例。
答案 2 :(得分:0)
假设您只想保留数组中的标记,这应该可以胜任。
DELETE FROM item_tagged
WHERE item_id = 2 AND tag_id NOT IN (
SELECT id FROM tag WHERE name IN (<<list your array contents here>>)
)
;
请注意,这不会删除任何孤立的标签,例如未分配给任何项目的标签。