我正在实现自己的博客系统,以更好地理解
PHP,mySQL和jQuery AJAX的面向对象方面.我在Post_T和Tag_T之间有多对多的关系,因此包括一个关联实体PostTag_T.在创建帖子时,我添加了一些函数来检查标签是否已经存在,并添加新标签和映射,或者只是将映射添加到现有标签.
我注意到的不幸是当删除Post时,TagT中的标记行仍然存在,而PostTag_T中的映射被删除(设置为ON DELETE CASCADE).如果标签没有被任何其他帖子使用,我该如何删除?删除帖子时我有帖子ID.
有用的逻辑
使用删除的帖子ID,从tag_t删除posttag_t中的pID =帖子ID并且posttag_t中没有其他帖子(pID)使用相同的标签ID.
delete from tag_t where tID = (select tID from posttag_t where pID='post id') AND..
为了您的理智,这里是一个视觉表现
在Post_T中创建了Post行:
PostTag_T中帖子和标签之间的映射:
Tag_T中创建的标记行:
删除时:使用AJAX POST和在url中调用php文件的数据(猜测这是我可能需要添加查询表的查询…)
最佳答案 当您删除由于ON DELETE CASCADE而发布的帖子时,posttag_t表中不再有行,因此尝试匹配它是没用的.这意味着您只剩下选项删除所有与任何帖子无关的标签.
您可以使用查询执行此操作
DELETE t
FROM tag_t t
WHERE NOT EXISTS
(
SELECT *
FROM posttag_t
WHERE tid = t.tid
);
这是SQLFiddle演示
现在你可以让一个触发器来处理它
CREATE TRIGGER gt_ad_posttag_t
AFTER DELETE ON post_t
FOR EACH ROW
DELETE t
FROM tag_t t
WHERE NOT EXISTS
(
SELECT *
FROM posttag_t
WHERE tid = t.tid
);
这是SQLFiddle演示