You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
------------------ 原始邮件 ------------------
发件人: TommyLemon ***@***.***>
发送时间: 2023年12月17日 13:07
收件人: Tencent/APIJSON ***@***.***>
抄送: 小云 ***@***.***>, Mention ***@***.***>
主题: Re: [Tencent/APIJSON] 是否支持不同字段的or (#107)
这种同一个字段要多次用的呢 ( age = 10 ) or ( age > 20 and status =1 )
@martin-1120
***@***.***":"age | (age> & status)", // 任意与或非条件组合
"age":10,
"age>"20,
"status":1
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: ***@***.***>
Activity
TommyLemon commentedon Sep 11, 2019
支持,见这个 issue
#84
TommyLemon commentedon Sep 14, 2019
@wang1784594241 你的评论怎么不见了?我在通知里还看到这个:
"这个我看了啊,只找到这个 "id{}":"<=80000,>90000" 单字段 可是这也不能举一反三就知道怎么写多字段or啊"
TommyLemon commentedon Sep 14, 2019
像上面那个例子,不考虑 id 为主键的话,可以
如果 id 是主键,那就不允许和别的字段 OR 了,防止绕过自动化权限控制。
再说这种需求几乎没有,一般都是多条件搜索才会用到不同字段的 OR,
例如通用文档例子里的「搜索name或tag任何一个字段包含字符a的User列表」:
还可以加上性别为女这个条件:
可以加上性能分析关键词
@explain:就能直接在 Response 里看到 APIJSON ORM 自动生成的 SQL 语句是:
MySQL( "@database": "MYSQL" ):
PostgreSQL( "@database": "POSTGRESQL" ):
Cole-Mu commentedon Sep 17, 2019
感谢,原来文档里也有,只是没这么详细,之前没看明白,这下理解了。
zhangchunlin commentedon Dec 22, 2020
我在 uliweb-apijson里不支持 @combine ,而是另外支持 @expr 这样一个更灵活的格式,可以支持比较复杂的表达,供参考,例子:
TommyLemon commentedon Dec 22, 2020
可以加个链接方便打开项目查看
martin-1120 commentedon Dec 16, 2023
这种同一个字段要多次用的呢
(
age = 10
)
or
(
age > 20 and status =1
)
TommyLemon commentedon Dec 17, 2023
@martin-1120
https://github.com/Tencent/APIJSON/blob/master/Document.md#3.2
"@combine":"age | (age> & status)", // 任意与或非条件组合
"age":10,
"age>"20,
"status":1
martin-1120 commentedon Dec 17, 2023
TommyLemon commentedon Dec 17, 2023
@martin-1120 你直接在 GitHub 上回复,不要用邮箱回复,现在代码有不少乱码,很难看
martin-1120 commentedon Dec 18, 2023
@TommyLemon
如果我想这样呢
一:
status=1 | (status=2 & age=20)
二:
status=1 | (status=1 & age=20)
二 我试过会报错 :
报错的意思是:数量不匹配 字段有两个 combine有三个
TommyLemon commentedon Dec 19, 2023
@martin-1120
DemoSQLConfig 重写 getMaxCombineRatio ,return 0
martin-1120 commentedon Dec 20, 2023
@TommyLemon 第一种呢
一:
status=1 | (status=2 & age=20)
TommyLemon commentedon Dec 20, 2023
一样。
只不过 JSON 的 key 不支持重名,需要换一种写法:
"status":1,
"status{}":"=2" 或 "status{}":[2]
martin-1120 commentedon Dec 21, 2023
@TommyLemon 就是重名怎办呢,比如有三个重名?没办法了吗
status=1 | (status=2 & age=20) | (status=3 & age=30)
martin-1120 commentedon Dec 21, 2023
建议是不是能像这样用冒号增加别名, 这样就很完善了
"status:status1":1,
"status:status2 ":2,
"status:status3 ":3,
"age:age20": 20,
"age:age30": 30,
"@combine":"status1 | (status2 & age20) | (status3 & age30)"
TommyLemon commentedon Dec 21, 2023
@martin-1120
还可以
"status&{}": "=1",
"status|{}": "=2"
你举的例子几乎不会实际出现在业务中,一般一个字段最多同时传两个条件,大部分需求一次请求每个字段都只有一个条件,不同的字段各一个条件组合起来,不存在冲突。
真要出现这么极端的情况,可以用 @raw 原始 SQL 片段
#627
TommyLemon commentedon Mar 29, 2025
@martin-1120 6.3.0+ 可以用
@key映射字段https://github.com/Tencent/APIJSON/releases/tag/6.3.0