加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

在MySQL查询中可能有条件限制吗?

发布时间:2021-01-17 20:31:34 所属栏目:MySql教程 来源:网络整理
导读:我面临有关在我们的项目中处理线程注释的决定 我有一个简单的MySQL表,其中包含所有注释.有两种类型:父母和孩子.孩子代表对父母或其他孩子的答复. 我的问题: -评论(深度0) -回复孩子(深度1) 答复前一个孩子(深度2) -评论(深度0) 想象一下上面的结构和一个

我面临有关在我们的项目中处理线程注释的决定…
我有一个简单的MySQL表,其中包含所有注释.有两种类型:父母和孩子.孩子代表对父母或其他孩子的答复.

我的问题:

-评论(深度0)
-回复孩子(深度1)
—答复前一个孩子(深度2)
-评论(深度0)

想象一下上面的结构和一个带有LIMIT 2的MySQL查询.它将切掉最后一个答复(深度2).实际上,我想说些类似的话:如果孩子离开,请尝试限制为2,直到下一位父母为止.尝试了几次没有运气的查询…

我现在所拥有的如下:
????选择
????SQL_CALC_FOUND_ROWS
????????*
????从
????????评论
????哪里
????????comment_post_id ='{$_REQUEST [“ ID”]}’
????订购
????????comment_id,comment_date
????DESC LIMIT 10“

重要的表字段是:
comment_id(索引)| comment_parent_id(包含parent或NULL的comment_id)| comment_date

我将非常感谢任何想法!!!

礼炮
笨蛋 最佳答案 MySQL没有任何函数可以解析树状结构.在最简单的情况下(子代具有父代的ID),您将需要以编程方式递归到树中以找到给定节点的所有子节点. MaxLevel指示您要转到的深度.每次递归调用时它都会递减,以便最后以0结尾,这将停止递归.

例如(伪代码)

findNodes(String parentId,int maxLevel)
{
  select * from posts where parent = parentId
  foreach (result...)
  {
    if (maxLevel > 0) 
    {
      findNodes(result.nodeId,maxLevel - 1)
    }
    doSomethingWIthAResult
  }
}

为了更简洁地执行此操作,有多种技术,所有这些技术都涉及某种索引字段,该索引字段包含当前帖子的路径.路径可能看起来像这样:TopNode:Child1:Child2:Child3 …在其中可以进行如下选择
从帖子中选择*,路径为“ TopNode%”,深度= 2.

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!