【发布时间】:2010-06-03 15:43:06
【问题描述】:
这个问题让我很头疼。
我的数据库中有两个表,它们借助称为“闭包表”的设计来解决类别排序问题。第一个表名为categories,另一个表名为categoriesPaths。
Categories 只是一个基于语言的表格:
id | name
----------------
0 | Category 1
1 | Category 2
CategoriesPaths 看起来像这样:
parent | children | level
-----------------------
1 | 1 | 0
1 | 2 | 1
2 | 2 | 0
要删除路径及其最终的子节点,我运行以下查询:($top 是删除将开始的最高父节点级别)
DELETE d FROM CategoriesPaths children
JOIN CategoriesPaths a USING (children)
WHERE a.parent = $top;
我想要做的是更改查询以同时删除categories 表中的代表性路径。不幸的是,我没有足够的 SQL 知识来执行此操作。我试图在查询之前使用 foreach 循环解决方法,但无法删除,因为 categoriestable 引用了 categoriesPaths...
话虽如此,我几乎被困住了。
如果有人想了解更多关于封闭表设计的信息,请参考我从中学到的幻灯片共享:http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
【问题讨论】:
标签: mysql join sql-delete