在电子商务网站中进行搜索时,经常要将各种条件进行组合查询,如选择了年份,价格,颜色,品牌等条件,要求输出满足条件的结果。我试图写一个SQL函数来实现这种动态组合的查询,但是还是没有能完全实现,只是能实现固定的2中组合的查询,希望各位大侠看到下面代码后能够帮忙实现下或者提供下思路:
/*根据字符串中的分隔符,将字符分割成一个列表,通过Table返回 */
create function [dbo].[fn_split](@inputstr nvarchar(4000), @seprator nvarchar(10))
returns @temp table (a nvarchar(200))
as
begin
declare @i int
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator , @inputstr)
while @i >= 1
begin
insert @temp values(left(@inputstr , @i - 1))
set @inputstr = substring(@inputstr , @i + 1 , len(@inputstr) - @i)
set @i = charindex(@seprator , @inputstr)
end
if @inputstr <> '\'
insert @temp values(@inputstr)
return
end
/*解析输入的字符串中的分隔符来获取搜索条件,
同时根据这些搜索条件在表T_B_ProductAttr中进行查询
目前函数只是实现了查询2个或者3个条件组成字符串的功能
我花了2个小时试图完成能将字符串分解成n个条件的查询,结果
未果,希望各位大侠能帮忙扩展成能将字符串分解成n个条件的查询
*/
CREATE function [dbo].[fn_GetProductIDByAttValue]
(
@attval nvarchar(200),--输入条件字符
@num int--条件属性的个数
)
returns @temp table (a nvarchar(200))
as
begin
--declare @temp table(a nvarchar(200))
--声明临时表来存放输入的条件值
declare @tempAttValue table(rownum int,a nvarchar(200))
--将条件值存放在临时表并加上行号
insert into @tempAttValue
select ROW_NUMBER() Over (ORDER BY a),a
from dbo.fn_split(@attval,',')
--如果条件的个数为2
if @num=2
begin
--声明属性参数并给其赋值
declare @attval1 nvarchar(30)
declare @attval2 nvarchar(30)
select @attval1=a from @tempAttValue
where rownum=1
select @attval2=a from @tempAttValue
where rownum=2
--获取查询到的结果并返回
insert into @temp
select ProductID from T_B_ProductAttr
where attrValue=@attval1 and ProductID in (
select ProductID from T_B_ProductAttr
where attrValue=@attval2)
end
else if @num=3
begin
--声明属性参数并给其赋值
declare @attval4 nvarchar(30)
declare @attval5 nvarchar(30)
declare @attval6 nvarchar(30)
select @attval4=a from @tempAttValue
where rownum=1
select @attval5=a from @tempAttValue
where rownum=2
select @attval6=a from @tempAttValue
where rownum=3
--获取查询到的结果并返回
insert into @temp
select ProductID from T_B_ProductAttr
where attrValue=@attval4 and ProductID in (
select ProductID from T_B_ProductAttr
where attrValue=@attval5 and ProductID in (
select ProductID from T_B_ProductAttr
where attrValue=@attval6
))
end
return
end
分享到:
相关推荐
B2Bbuilder是一款基于PHP+MySQL的开源B2B电子商务行业门户网站解决方案,利用B2Bbuilder可以快速布署建立一个功能强大的 B2B电子商务行业网站,或地方门户网站。B2Bbuilder也是目前国内用户最多,功能齐全,性能好,...
问题 2-7: 我的 Visual FoxPro 5.0 表单中包含有 ListView 或 TreeView 控件,它们不继承其新版本中的最新功能(如支持复选框)。已发布的应用程序中,由于带有这些表单,而在最终用户的机器上出现表单 OLE 错误,...
作为2020年计算机科学专业的毕业生,我接受这一挑战的原因是巩固在我的学位课程中学到的概念,建立一致性,探索新技术以及在开展小型电子商务业务时自动化我遇到的任务()。 我将在推特上发布我的进度 开始日期 ...
B2Bbuilder是一款基于LAMP架构的B2B电子商务软件系统[软件著作权登记号:2009SR041150],利用B2Bbuilder可以快速布署建立一个功能强大的B2B电子商务行业网站,或地方门户网站。B2Bbuilder也是目前国内用户最多,功能...
这正是我们的专业,专业针对B2B电子商务平台、BBS论坛、博客等。只要您能用手工发布填写信息的网站,又没时间每天去注册、发布、刷新信息,那么还是选择我们吧!随意发-企业信息助手都能让您实现。 软件模拟人工...
MallBuilder为拓展企业销售渠道,突显电子商务商业价值,致力于推动电子商务技术的发展而不断努力。365天精心研发,真情回馈客户! MallBuilder功能(包括中英文及多语言) 垃圾信息过滤 内置远丰网盾,智能垃圾信息...
B2Bbuilder是一款基于PHP+MySQL的开源B2B电子商务行业门户网站解决方案,利用B2Bbuilder可以快速布署建立一个功能强大的 B2B电子商务行业网站,或地方门户网站。B2Bbuilder也是目前国内用户最多,功能齐全,性能好,...
MallBuilder为拓展企业销售渠道,突显电子商务商业价值,致力于推动电子商务技术的 发展而不断努力。365天精心研发,真情回馈客户! MallBuilder功能(包括中英文及多语言) 垃圾信息过滤 内置远丰网盾,智能垃圾...
B2Bbuilder是一款基于LAMP架构的B2B电子商务软件系统[软件著作权登记号:2009SR041150],利用B2Bbuilder可以快速布署建立一个功能强大的B2B电子商务行业网站,或地方门户网站。B2Bbuilder也是目前国内用户最多,功能...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的...
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获...
从博客和企业主页到电子商务商店以及介于两者之间的所有内容,Divi无疑是一种多功能的网站构建工具。 2. Extra WordPress主题是在Divi之后推出的,其中包括许多最佳功能。 Divi是一个多用途主题,而Extra是为博客,...
B2Bbuilder B2B网站管理系统最新官方版,B2Bbuilder是一款基于LAMP架构的B2B电子商务软件系统[软件著作权登记号:2009SR041150],利用B2Bbuilder可以快速布署建立一个功能强大的B2B电子商务行业网站,或地方门户网站...
之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言...