开发者社区> 问答> 正文

mysql In长度的问题?

业务逻辑中常有这样的情况:
得到某一个无限分类下面的全部文章。

统计某一账号下面店铺的全部订单。

经常会用到article: in (cid,……),
order: in (shop_id,……)

如果某个分类下面有很多很多子分类,总之很多很多,可能无限,某一个账号下面也有n个店铺,那么in ()不撑死了啊,sql长度不能很大吧

不知道对于这种情况有没有什么好的方法,项目中很多地方都是这样用in (),从来没有考虑过这个问题,今天突然想到了,意识到了这个问题,不知道有没有好的优化方式。

在线等大神,谢谢了!

展开
收起
a123456678 2016-07-04 17:36:07 3325 0
1 条回答
写回答
取消 提交回答
  • 不记得有代替in的语句,可能也是因为我不太关注sql导致水平较低哈。
    这种问题通常是由于无限分类表本身的设计问题导致的,例如只有id, parent_id两个字段,所以只要in了,如果无限分类表包含 id, parent_id, level(树高), path这个字段的时候就可以避免使用in了。

    我个人使用的一个无限分级表包括以下的字段
    id 唯一索引
    parent_id 父级的id
    number 数轴投影序号
    leve 树高
    left_number 已当前节点为树根时,其下的最左端的子节点的数轴投影序号
    一个简单的例子演变:

    [id:1, level:1 number: 1, left_number:1]
    插入一个子节点

    [id:1, level:1 number: 2, left_number:1]
    [id:2, level:2 number: 1, left_number:1]
    于level2再插入一个子节点

    [id:1, level:1 number: 3, left_number:1]
    [id:2, level:2 number: 1, left_number:1] [id:2, level:2 number: 2, left_number:2]

    这种树形的数据维护很麻烦,但是搜索要快的多,例如任意节点下的全部子节点就是left_number到number-1。用这个做过一个Chuan啊销系统的人员结构树,效果很不错。

    核心思路就是把一颗树的分支转换为数轴上的点/线段,从而在数轴上得到完整的树的投影。

    忘了一个top_id,表示节点对应的根节点,否则表里面有多颗树的话就出问题了。

    2019-07-17 19:50:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像