数据库如何实现动态/多条件/多逻辑关系的复杂查询 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LuffyPro
V2EX    数据库

数据库如何实现动态/多条件/多逻辑关系的复杂查询

  •  
  •   LuffyPro 2024-02-29 21:26:39 +08:00 1813 次点击
    这是一个创建于 590 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在想通过 mysql 之类的数据库实现,查询条件为树状的查询,要求大概这样:

    • 同级和上下级查询的结果集之间支持与(∩)和或(∪)的关系(or/and)
    • 元素跟集合的关系可以实现排除/包含( int/ot int/exsit...)
    • 字段跟字段的可以实现大小等关系(>,<,=,like,not like)
    • 支持字段的数学计算(统计数量,求和,求差等)
    • 简单举个例子,大致的关系如下( A,B,C,D 为单条件结果集,比如 A 为 stu.name='大佬',B 为 count(stu_class.class_id)>2 ,C 为 stu_association.association_id in(1,2,3))...补充以下,下面的图,AC ,BD ,BC 等也可以支持与(∩)和或(∪)的关系(抱歉,偷懒没画),并且所有节点之间的关系(∪和∩),单节点里面的条件(比如 in/not in )都是可配置的
    A ∪ B ├── B ∩ C │ ├── C ∪ D │ └── D └── C 
    • 当然不一定要使用某个数据库,甚至可以不用数据库的方式去实现,但现在我要查询的数据都放 mysql 数据库里面,大佬们如果有其他性能和匹配效果更可靠的方案,也可以说下
    • 谢谢大佬们的回复(●''●),(ノ)ノ
    第 1 条附言    2024-03-01 13:03:17 +08:00
    实际情况简单的树状图查询过程:
    7 条回复    2024-03-01 18:55:19 +08:00
    xuanbg
        1
    xuanbg  
       2024-02-29 22:34:13 +08:00
    什么叫做树状的条件?
    xhawk
        2
    xhawk  
       2024-03-01 05:07:41 +08:00 via Android
    首先梳理一下你的想法,其实是想 先根据条件 1 条件 2 查询,查询的结果再根据条件 3,4 查询,以此类推。

    其实你这个查询本身就是树形查询,本身就是 and 操作,最多是对所有步骤优化一下,让一次查询快点,完全没必要搞成这种树形分布的,你这个查询,传统的二维数据库会变成超级大的 io 开销。

    的确想实现,要切换成多维数据库,比如 oracle essbase
    LuffyPro
        3
    LuffyPro  
    OP
       2024-03-01 13:04:09 +08:00
    @xuanbg
    简单举个例子,需要实现的逻辑大致如附言图,每个查询都有纵向多条件查询,和横向单条件多级查询,最终 sql 如果拼一起类似一个树状的查询结构,并且树的深度不限(实际取决于业务,但一般也不会太夸张)

    @goodhawk 嗯嗯,差不多,谢谢建议,确实,实现是一个,但重点是性能不能太拉跨。
    guangming3055
        4
    guangming3055  
       2024-03-01 14:05:19 +08:00
    之前实现过类似的查询,用的是 ElasticSearch ,它的查询语法很适合你的需求
    LuffyPro
        5
    LuffyPro  
    OP
       2024-03-01 14:26:49 +08:00
    @guangming3055 是的,es 是考虑之一,不过基于我们现状,成本稍微高点,不过好奇,你们用 es 实现的类似需求,数据表现怎么样?
    Akiya
        6
    Akiya  
       2024-03-01 14:53:07 +08:00
    图数据库
    LuffyPro
        7
    LuffyPro  
    OP
       2024-03-01 18:55:19 +08:00
    @Akiya 谢谢回复,这个听起来不错。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     841 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 20:47 PVG 04:47 LAX 13:47 JFK 16:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86