vince
1
背景&操作步骤
做了什么操作后,出现的该问题
- 数据表设置的单选类型字段,如果设置的是其他数据表取值,在表单或者筛选器中,取值异常
问题
1、数据表设置截图
2、单选字段点击后,网路请求参数如下:
主要的参数应该是这个:
Select([F("finalTable.name", "name"),F("finalTable.sort", "sort")],From([Select([F("originTable.name", "name"),F("originTable.sort", "sort")],From([Select([ F('name'),F('sort')],From(["models.DeviceCategory"]),), "originTable"],InnerJoin(Select([F('name'),F(Formula("COLMAX(F('sort'))"), "sort_sort")],From([Select([ F('name'),F('sort')],From(["models.DeviceCategory"]),)]),GroupBy(F('name')),"分组汇总"),"groupTable"),On([F("originTable.sort"), "=", F("groupTable.sort_sort")]))), 'finalTable']), OrderBy([F("finalTable.sort", "sort"), 1]) )
页面截图
结果却是异常的:
1、对应的表里只有69条数据,但是却有500条数据返回
2、这500条中,基本都是重复数据,由于limit是500,就会导致对应表里的69条数据没有全部囊括。
经过我的测试,这个表现跟你数据里面sort字段的值有关系:
如果sort是正确的,单选字段里面就没有重复:
如果sort都是1, 就会重复:
虽然接口里面的数据重复了, 但是页面表现应该是去重后的:
vince
4
对于下拉选项的值,如果相同排序字段的数据超过了50条。而接口的limit是500.那么就会有一些值不会返回回来,导致下拉框中的值不会全部返回,只会返回一部分。
而且sort的值,正式环境里不会全部是1 ,但是程序应该允许值可以设置重复,但是返回值不应该重复返回。这很明显应该是单选字段后端拼接数据库查询语句时需要处理的一种场景吧。
比如我的待选数据是69条,这样导致返回的前端可以选择的值只有8条数据。这很明显就不正确。
举个类似例子说明,如果我的排序字段是文本,取自订单明细表的产品名称。那么随着时间的推移,订单明细中相同产品的重复条数就会很多,那么到时候返回的数据难道就可以重复并且遗漏吗?
vince
5
通过测试,有两个语法可以解决sort重复的结果,应该还有其他的方案,你们可以多尝试验证。
方案1:使用完整路径引用
Select([F("name"),F(Formula("COLMAX(F('sort'))"),"sort")],From(["models.DeviceCategory"]),GroupBy(F("name")),OrderBy([F("sort"),1]))
方案2:使用子查询方式(更接近原结构)
Select([F("name"),F("sort_sort","sort")],From([Select([F("name"),F(Formula("COLMAX(F('sort'))"),"sort_sort")],From(["models.DeviceCategory"]),GroupBy(F("name"))),"grouped"]),OrderBy([F("sort"),1]))