不知怎样写这个sql
因为手机有70多个参数,我没有将每个参数做成一列。表结构如下:
手机品牌 | 手机型号 | 参数名称 | 参数值
----------------------------------------
诺基亚 3230 摄像头 130万
诺基亚 3230 上市时间 2005年
UT斯达康 X10 上市时间 2007年
.........
现在我要找:摄像头130万,价格2000以下,2005年以后的手机型号。不知要怎样组织sql语句。各位兄弟帮下忙!谢谢!
------解决方案--------------------。。。
if 条件
SQlstr= " and 摄像头=130 "
条件
SQlstr= " and 价格 <2000 "
select x from 表 where 1=1 "+ SQLstr + "
------解决方案--------------------select * from (
select * from table where '参数 '= '摄像头 ' and 参数值= '130万 ') t
where t.price <2000
------解决方案--------------------很简单啊:
Select 手机品牌 from table where 摄像头=130万 and 手机品牌 in
( Select 手机品牌 from table where 价格 <2000 and 手机品牌 in
( Select 手机品牌 from table where 上市时间 > 2005)
)
------解决方案--------------------楼主你还是先修改一下数据库吧
参数名称里要么是“摄像头”,要么就是“上市时间”
现在条件要既包括“摄像头”又包括“上市时间”
怎么玩?
------解决方案--------------------。。。不好意思。。改成 字段就好了。。
if 条件
SQlstr= " and 参数值=130 "
条件
SQlstr= " and 价格参数值 <2000 "
select x from 表 where 1=1 "+ SQLstr + "
------解决方案--------------------数据库有点问题呀.....
------解决方案--------------------哦,看清楚了
是通过数据冗余的代价来实现这个表结构的 啊
select 手机型号 from table where 参数名称= "上市时间 " and 参数值> "2005-1-1 " and 手机型号 in (select 手机型号 from table where 参数名称= "摄像头 " and 参数值= "130万 ")
------解决方案--------------------连接查询!
------解决方案--------------------我觉得表机构该下做两个表更好写哦
像这样的数据
------解决方案--------------------参数名称 | 参数值这2个字段单独建一张表
使用主外键关联
一条手机名称和手机型号表记录对应多个参数名称和参数值表记录
------解决方案--------------------a表:
参数id | 参数名 |手机id |参数值
------------------------------------
1 摄像头 1 130
2 上市时间 1 2005-1-1
b表:
手机id 手机品牌 | 手机型号
----------------------------------------
1 诺基亚 3230
3 UT斯达康 X10
------解决方案--------------------你这个表设计的还真有问题
------解决方案-------------------- select 手机型号 from b where 手机型号 in (select 手机型号 from b where 参数id in( select id from a where 参数名称= "摄像头 ") and 参数值= "130万 ") and
手机型号 in (select 手机型号 from b where 参数id in( select id from a where 参数名称= "上市时间 ") and 参数值> "2005-1-1 ") and and price <2000
自己都晕了
不知道写的对不对,反正效率绝对不高