在上篇日志中,我们已经将商品的扩展属性存储在一个XML类型的字段中,详情请查阅:利用SQL SERVER2005的XML字段类型实现类似“商品扩展属性”的功能(1)
本篇日志将介绍如何对此字段进行查询,也就是说要实现网站用户通过选择一个类别的扩展属性来对于此类别下的商品进行方便的查询。 SQL SERVER2005新加入XML字段类型,同时也新加入了支持方便查询或是更改此类型的函数,具体函数的详细介绍可以参见此文:SQL Server2005的XML数据类型之基础篇。
例如我们要查询手机中“是否为智能机”属性为“是”的手机,sql如下写法: select b.* from productExpand a left join product b on a.fproductId=b.fprductId where a.fexpand.exist('/exp/item[@value=1]')=1 即可,因为这里在表 属性选择值定义表(表名:expandItem) 中“是否为智能机”属性的选择项“是”的标识ID为“1”,所以我们查 value=1,由于每个选择项的标识ID都不一样,所以我们这里可以不管“name"属性,直接查value即可。
例如我们要查询手机中“是否为智能机”属性为“是” 并且 “手机制式”属性为“GSM”的手机,sql写法为:select b.* from productExpand a left join product b on a.fproductId=b.fprductId where a.fexpand.exist('/exp/item[@value=1]')=1 and a.fexpand.exist('/exp/item[@value=3]')=1 (属性“手机制式”中选项“GSM”的标识ID为“3”)
通过这样子的SQL写法就可以实现网站前台通过扩展属性对网站商品的详细查询功能,个人测试的结果感觉效率还是可以让人满意的,当然,我并没有进行过海量数据的测试,有兴趣的朋友可以测试一下儿查询效率。
关于SQL SERVER2005中XML字段类型的认识我也比较浅薄,这次的应用也算是现学现卖,如果各位朋友有好的建议或是本中有不对地方欢迎大家提出。
| 昵称 密码 游客无需密码 |
| 网址 电邮 注册 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |















