困扰了好久的问题,没想到好的解决算法,请教高手~~

弘毅致远 2010-05-11 12:41:38
有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,晚上回来结贴。
...全文
182 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
弘毅致远 2010-05-14
  • 打赏
  • 举报
回复
自己找到方法,解决了。
dawugui 2010-05-11
  • 打赏
  • 举报
回复
很长很复杂,先顶.
弘毅致远 2010-05-11
  • 打赏
  • 举报
回复
沙发自己坐~
playwarcraft 2010-05-11
  • 打赏
  • 举报
回复
偶没看懂。。。。。。

htl258_Tony 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acupofnescafe 的回复:]
分写多个存储过程,然后在下拉列表的selectedchange事件中调用带关联关系的存储过程就可以了吧.
[/Quote]这种方式应该也是可以的
ggfcoffee 2010-05-11
  • 打赏
  • 举报
回复
三楼的说的有理
htl258_Tony 2010-05-11
  • 打赏
  • 举报
回复
写个返回列表的表值函数,输入参数即可得到列表。
999朵玫瑰 2010-05-11
  • 打赏
  • 举报
回复
学习了
无语中V5 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acupofnescafe 的回复:]
分写多个存储过程,然后在下拉列表的selectedchange事件中调用带关联关系的存储过程就可以了吧.
[/Quote]顶起
幸运的意外 2010-05-11
  • 打赏
  • 举报
回复
分写多个存储过程,然后在下拉列表的selectedchange事件中调用带关联关系的存储过程就可以了吧.
永生天地 2010-05-11
  • 打赏
  • 举报
回复
id,key 和vaild是什么意思啊,为什第一次时vaild=1而第二次就是0了

还有A B C D E是不是已有的表,然后需要根据选择生成数据

这个出来的是不就是你说的笛卡尔
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代表所有,那为什么还是两条数据

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧