是这样的..我现在有三个表,第一个是用来保存某种业务的参数表,如出租房屋这种业务,有面积等等的参数.可以由用户自己增加或删除,第二个表用来记录登记的一些信息,如张三来登记出租房屋,第三个表是用来保存登记的具体信息,如登记了出租房屋,那么就从第一个表里查出参数的个数及名称..然后再一一保存进第三个表!!!问题来了...我现在要对第三个表做多条件查询...如面积>=100或 朝向为南等,这下麻烦了,用SQL字符串拼接没问题.但是参数类型全是STRING类型,不知道该如何来做了....是不是我的数据表设计错了?我刚学VB跟数据库,只懂少少,麻烦各位给点建议啦!!谢谢
tb_agParam:
id(自动编号) pid(文本) bname(文本) pname(文本)
1 cs001 出租房屋 面积
2 cs002 出租房屋 地址
3 cs003 出租房屋 楼层
4 cs004 出租房屋 朝向
tb_register:
id(自动编号) rid(文本) bname(文本) cname(文本) rdate(时间/日期)
1 jl0001 出租房屋 张三 2008-03-22
2 jl0002 求租房屋 李四 2008-03-22
tb_content:
id(自动编号) rid(文本) pname(文本) ptype(文本)
1 jl0001 面积 100
2 jl0001 地址 佛山
3 jl0001 楼层 3
4 jl0001 朝向 南
------解决方案--------------------
提供这么大的灵活给用户?你自己定死有几项就行了,其它你可以开个memo,然用户自己输入。
不然我搞个上百项在里面都可以,装修材质、牌子、马桶型号、地板砖尺寸。。。晕死你。
------解决方案--------------------
我上午就说过他的设计有问题了.
------解决方案--------------------
这样设计灵活性很好,数据也不冗余,但就是查询有点费事,不过也是有办法的,就像你说的拼接SQL。
对于表b_agParam建议多加一个字段,来标记属性的类型,到时候查询就可以用convert或者cast来处理了。
------解决方案--------------------
你的数据库有严重问题,数据库元素的基本原则之一就是,每个元素不可再分。
tb_agParam:
id(自动编号) pid(文本) bname(文本) pname(文本)
这个可以更改成
tb_agParam:
id(自动编号) pid(文本) bname(分类) pname(文本)
否则就没的玩了。
本来想帮你了,但是解决了这个,解决不了所有的。
建议更改数据库结构了。
------解决方案--------------------
首先尽量简化你的数据库设计,尽量减少冗余数据和不必要的拆分.
其次,关于多表的模糊查询,写个存储过程,动态执行T-SQL即可.
http://topic.csdn.net/u/20080322/10/3ca74d95-9ef5-44d6-ad4b-44149c6fdaec.html
------解决方案--------------------
------解决方案--------------------
- SQL code
select * from tb_register a where exists (select 1 from tb_content where a.rid = rid and pname ='面积' and ptype >=100)--sql会自动类型转换。and exists (select 1 from tb_content where a.rid = rid and pname ='朝向' and ptype = '南')
------解决方案--------------------
这样更明白些,容易理解。
- SQL code
declare @v varchar(10)select @v = '40'select * from (select 1 id,'字符串比较40<5' sm,case when @v> '5' then @v else 5 end as v unionselect 2,'数字比较40>5' ,case when @v> 5 then @v else 5 end unionselect 3,'字符串比较40>300' ,case when @v>'300' then @v else 300 end unionselect 4,'数字比较40 <300' ,case when @v> 300 then @v else 300 end ) a order by id/*id sm v ----------- ---------------- ----------- 1 字符串比较40<5 52 数字比较40>5 403 字符串比较40>300 404 数字比较40 <300 300*/