Confluence页面下拉列表基于无参数据库函数的排序问题咨询
定制Confluence下拉列表的匹配排序逻辑
嘿,我刚好碰到过类似的需求!你描述的这个排序规则其实可以通过调整数据库视图的排序逻辑来实现,结合你提到的code_part1、code_part2、code_part3、fullcode这些列,咱们一步步来拆解:
首先先明确你要的排序优先级(从你的示例结果反推):
- 第一档:
toto作为中间段的条目(比如aaa.toto.aim、aaa.toto.becare) - 第二档:**完全等于
toto**的条目 - 第三档:
toto作为前缀的条目,并且按层级从短到长排序(toto→toto.aim→toto.aim.thisis,toto.becare系列同理)
接下来,你需要修改返回结果的SQL逻辑——不管是直接修改视图的排序,还是在调用视图的无参数函数里加上排序条件,核心都是用CASE语句定义优先级,再配合长度和内容排序。
给你一个具体的SQL示例,直接加在视图的ORDER BY里就行:
ORDER BY CASE -- 匹配中间包含.toto.的情况(对应aaa.toto.xxx这类) WHEN fullcode LIKE '%.toto.%' THEN 1 -- 完全匹配toto的情况 WHEN fullcode = 'toto' THEN 2 -- 匹配以toto.开头的情况(对应toto.xxx这类) WHEN fullcode LIKE 'toto.%' THEN 3 -- 其他不匹配的情况(如果有的话,排最后) ELSE 4 END, -- 第三档里先按字符串长度升序(短的在前),再按内容字典序排序 LENGTH(fullcode), fullcode
如果你的code_part列有明确的层级划分(比如aaa是code_part1,toto是code_part2),还可以把CASE条件写得更精准,比如用code_part2 = 'toto'来替代fullcode LIKE '%.toto.%',这样匹配更准确,不会出现误判。
最后只要确保Confluence调用的那个无参数数据库函数,返回的是已经按这个规则排好序的视图结果,下拉列表就会呈现你想要的排序效果啦!
内容的提问来源于stack exchange,提问作者Cascador84
相关产品推荐
相关产品推荐

