我在表exp_weblog_titles中有一系列的博客条目。它按表exp_categories c中的类别分类,并由表exp_category_posts cp连接。
类别中存在父子关系。目前,我想把目前归类为4810类子项的所有条目都归类,并将这些条目本身归类为4810类。
这是我为此操作提出的(未经测试的)查询:
INSERT INTO exp_category_posts (entry_id,cat_id)
(select distinct(t.entry_id), '4810'
from
exp_weblog_titles t
left join
exp_category_posts cp ON t.entry_id = cp.entry_id
left join
exp_categories c ON c.cat_id = cp.cat_id
where
t.weblog_id = 5 and c.parent_id = 4810)
但我想避免在category_posts cp中插入新的连接记录,其中可能存在相同的连接记录。
我无法理解那些不存在的东西。它是否应该是插入操作的一部分,subselect?无论如何都无法想象。
这将是:
IF NOT EXISTS
SELECT * FROM exp_category_posts
where cat_id = 4810 and entry_id = $thecurrentrow
但我是否要参考当前行?
这是在ExpressionEngine 1中。
Mats的答案引起的更新:(entry_id,cat_id)上没有唯一键。不确定添加一个的后果。
答案 0 :(得分:1)
假设(entry_id, cat_id)
是exp_category_posts
中的唯一键,您应该可以使用INSERT IGNORE
。 INSERT IGNORE
将跳过在插入时会产生重复键错误的记录。
您可以在参考手册http://dev.mysql.com/doc/refman/5.5/en/insert.html中找到更多信息。