用于删除数组中未找到的标记的SQL:

时间:2011-05-11 19:57:17

标签: php mysql sql

我有一个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

3 个答案:

答案 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>>)
  )
;

请注意,这不会删除任何孤立的标签,例如未分配给任何项目的标签。