有5个条件 A,B,C,D,E
A,B之间有父子关系,
C,D之间有父子关系。
A,B,C,D,E展现给用户的是5个下拉列表,根据A选择项,加载B;根据C选择项加载D。
每个条件的第一项为所有。若在数据维护时,该选项是所有,查询要求根据子项可以查出按所有维护的基础数据。
例如:数据维护时选择的是
A5,A5-B3,C4,C4-D23,E50,
数据库保存的是对应的代码,假如是
id key A B C D E valid
1 S20100510-01 10 20 13 15 23 1但维护时如果其中有一项或多项为所有,我想到的方法有两种:
方法1是,如果有项目维护为所有,就把维护为所有的项目进行笛卡尔积进行保存。
这种方法数据在更新时需要调整的数据比较多。
方法2是,如果有项目维护为所有,在保存时先检测是有子项已经维护,如果有进行覆盖。
所有项保存-1,以示标志。
对于上面的实例如果第二次维护时选择的是
所有,所有,C4,所有,E50
数据库保存的是
id key A B C D E valid
1 S20100510-01 10 20 13 15 23 0
2 S20100510-02 -1 -1 13 -1 23 1现在根据具体项进行查询,直接匹配查询失败,需要放大条件。即把部分选项设为-1,去匹配。
这种试探方式,需要进行很多次。在sql进行判断放大,有很大的代码重复。向高手请教,有没有好方法实现上面的逻辑~~~~白天不能上CSDN,晚上回来结贴。
A,B之间有父子关系,
C,D之间有父子关系。
A,B,C,D,E展现给用户的是5个下拉列表,根据A选择项,加载B;根据C选择项加载D。
每个条件的第一项为所有。若在数据维护时,该选项是所有,查询要求根据子项可以查出按所有维护的基础数据。
例如:数据维护时选择的是
A5,A5-B3,C4,C4-D23,E50,
数据库保存的是对应的代码,假如是
id key A B C D E valid
1 S20100510-01 10 20 13 15 23 1但维护时如果其中有一项或多项为所有,我想到的方法有两种:
方法1是,如果有项目维护为所有,就把维护为所有的项目进行笛卡尔积进行保存。
这种方法数据在更新时需要调整的数据比较多。
方法2是,如果有项目维护为所有,在保存时先检测是有子项已经维护,如果有进行覆盖。
所有项保存-1,以示标志。
对于上面的实例如果第二次维护时选择的是
所有,所有,C4,所有,E50
数据库保存的是
id key A B C D E valid
1 S20100510-01 10 20 13 15 23 0
2 S20100510-02 -1 -1 13 -1 23 1现在根据具体项进行查询,直接匹配查询失败,需要放大条件。即把部分选项设为-1,去匹配。
这种试探方式,需要进行很多次。在sql进行判断放大,有很大的代码重复。向高手请教,有没有好方法实现上面的逻辑~~~~白天不能上CSDN,晚上回来结贴。
select a.code a,b.code b,c.code c,d.code d,e.code e from
(select code from A where a.value=@value1 or @value1='所有') a,
(select code from B where b.value=@value2 or @value2='所有') b,
(select code from C where c.value=@value3 or @value3='所有') c,
(select code from D where d.value=@value4 or @value4='所有') d,
(select code from E where e.value=@value5 or @value5='所有') e
再就是如果以-1代表所有,那为什么还是两条数据