之前我们学习了,数据集的列都可以用来查询,例如 =query.ds.名称
表示按照名称进行模糊查询, =query.ds.性别
表示按照下拉项性别进行查询, =query.ds.部门
表示按照下拉列表部门进行查询。在查询项之后,建立一个查询按钮就可以了。 下面我们以用户管理为例,学习一下更复杂的查询。
大于,小于,等于,相似等其他关系查询。
大于等于,大于,小于,小于等于。
like:模糊查询。(文本类型的字段默认就是like查询)
eq:严格相等
间接列查询(多对一关联查询)。
根据部门的名称来查询,可以写为=query.ds.部门.名称
。表现为输入一个名称,查询名称符合的部门的用户。例如输入“业务”,查询出“业务1部”,“业务部”的用户,而不会查询出“财务部”的用户。
根据部门的主管来查询管理的用户。可以写为=query.ds.部门.主管
。表现为选择一个用户,列出该用户管理的部门的用户。
同理,进一步可以根据部门主管的名称来查询,可以写为=query.ds.部门.主管.名称
子表一对多关联查询。
除了根据数据集的字段对应的数据表的间接列(多对一)查询外,MisShop还提供了多对一的查询。例如用户管理着多个部门,我们可以根据主管的部门进行查询。
表示根据用户数据集ds的一对多关联找到对应的部门(部门表的主管字段是用户),去查找主管输入的部门的用户数据。这里选择业务部,查找返回的是admin,因为admin是业务部和财务部的主管。
主管部门:=query.ds.OM_主管^部门
:表示这里按照选择的部门,去找这个部门的主管。
主管部门不包含:=query.ds.OM_主管^部门
:表示这里按照选择的部门,去找不是这个部门的主管的用户。
主管部门的名称:=query.ds.OM_主管^部门.名称
:表示这里按照名称寻找满足条件的部门,再去找这些部门的主管。
列表项里的=ds.OM_主管^部门 表示找到这个用户管理的部门(部门id),用逗号分隔。
列表项里的=ds.OM_主管^部门.名称 表示找到这个用户管理的部门的名称,用逗号分隔。
查询的初始值。
例如希望进入页面的只显示男性用户,之后可以修改筛选条件,查看全部或者女性用户,可以通过如下操作实现:
B2格原先是=query.ds.性别
,将格值修改为Dict.性别.男
,将右边属性栏里的 保存至 属性里,输入=query.ds.性别
。这表示这个格子还是做为ds的性别来查询,但这个格子初始有值是Dict.性别.男。 这样初期进去就仅显示男性用户。
立即查询
查询项变动后不用点击查询按钮。
例如上面的性别重新选择为女后,直接查询。
鼠标右键选择B2格,控件配置,然后点击高级,打开值改变事件的标签,输入函数Web.Query.innerQuery(@mis_queries)
。这个函数其实就是查询按钮执行的函数。
使用dynamic实现周,月,季度的时间段查询。
输入时间段数值,选择时间段单位,点击查询。
配置方法:
- B2格设置 值为1,设置控件类型为输入框,设置数据类型为整数。(值为1表示初值为1)
- C2格设置 值为3,设置控件类型为下拉选项框。(当然如果有现成的字典项,直接设置为字典项也可以),值为3,表示初始显示为年
- G2格设置值为
=ifv(dynamic(C2)==1,Date.today().addDay(-1*dynamic(B2)),C2==2,Date.today().addMonth(-1*dynamic(B2)), Date.today().addYear(-1*dynamic(B2)) )
,保存至 为query.ds.生日.大于等于
G2的格值意思是如果C2==1,那么当前日期减去B2的值的周,如果C2==2,当前日期减去B2的值的月,否则当前日期减去B2的值的年。通过dynamic,当C2和B2的值变动时,G2的值计算为开始日期,通过生日的大于等于关系进行查询。
ifv函数,第一个参数表示条件,如果第一个条件满足,返回第二个参数,第三个参数,第五个参数,第七个参数也都是条件,如果满足,返回之后的那个参数。 直到最后一个参数表示前面的条件都不满足的时候,返回的值。
4.为了显示好看,可以把中间数据G2设置为隐藏。