删除评论主题的整个系列

时间:2015-09-11 22:47:41

标签: php mysql optimization

好的,这是我的问题。我正在为我的客户实施一个论坛。该代码是几年前编写的,我正在处理删除功能。

基本上,您有主要主题。人们可以对此发表评论,然后对评论进行评论。

布局如下:

[主要帖子]
[评论A - ID 1 - 家庭创始人]
[评论2 - 父母1 - 身份证2]
[评论3 - 父母1 - 身份证3]
[评论4 - 家长3 - 证件4]
[警告B - 身份证5 - 家庭创始人]
[评论6 - 家长5 - 身份证6]
[评论7 - 家长6 - 证件7]

该表存储此信息如下: ID |家长ID |主题ID |评论内容

目前,它设置为使用两个函数运行 第一个,调用主要注释(注释ID 1),然后在底部,它调用以查看是否有任何注释ID 1的子项然后循环它们等等。尝试解释是令人困惑的。

问题是,我无法跟踪找到的初始系列(A和B,分别为ID 1和5)。

我能想到的唯一方法就是调用一个函数在数据库上进行大量查询,直到子计数为0.存储所有ID然后运行删除查询。

感谢任何帮助。如果我能更好地解释,请告诉我。

2 个答案:

答案 0 :(得分:1)

ParentID实际上是一个外键,所以我添加一个

FOREIGN KEY(ParentID) REFERENCES Comment(id) ON DELETE CASCADE

约束

答案 1 :(得分:0)

我认为你应该再次使用,e.a。一个函数,首先打印parrent,然后搜索所有的孩子,然后为孩子们运行。 这意味着你有以下函数调用:

  • ShowPost(Main)调用ShowPost 1
    • Showpost 1
    • 调用showpost 2,打印并结束
    • 调用showpost 3
      • Showpost 3调用ShowPost 4,结束
    • 并且showpost 3也结束了。
    • 然后ShowPost(1)结束导致
  • ShowPost(Main)调用ShowPost 5
    • ShowPost 5调用ShowPost 6 等

基本上类似于:

function showPost(int ID) {
  #Find record
  mysql.runquery ...
  #print record
  echo '...';
  #find children
  myql.runquery ...
  while (c=mysql.nextrecord()) {
    showpost (c.ID);
  }
}

删除类似:

function deletePost(int ID) {
  #find children
  myql.runquery ...
  while (c=mysql.nextrecord()) {
    deletepost (c.ID);
  }
  #Then delete himselve.
  mysql.run_sql ('delete from table where id = '.ID);
}