A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘建素 中级黑马   /  2012-7-22 11:56  /  1660 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我的表结构是这样的   这是客户表中的三个基本字段其实用到也就F45_T025  它是个标签字段 里边儿存储的是管理员对会员打标签时输入的内容 一次可以打几个 标签之间是以逗号隔开 比如说第二条字段有两个标签为:好客户和月消费2000中间以逗号隔开 现在需求是 当我搜索是比如我在文本框中输入 tag,月消费2000    的话 F45_T025 字段中只要包含 tag 和 月消费2000其中一个的标签全部显示。

现在我的解决方案是使用UNION ALL
select OID_T025,F5_T025,F45_T025 from T_025 where OID_T025 in( select OID_T025 from T_025 where 'tag' in (select short_str from dbo.split(F45_T025,',')) union all
select OID_T025 from T_025 where '月消费2000' in (select short_str from dbo.split(F45_T025,',')))
其中dbo.split 是一个函数  也就是当你传入一个以逗号分割的字符串时它会帮你分割为表  比如我写 select * from dbo.split('123,2,4',',') 执行后 返回为
而我这样写的话在cs代码中处理就比表繁琐
string[] ts = cusName.Split(',');
                        if (ts.Length > 1)
                        {
                            filter.Append(" AND OID_T025 in (select OID_T025 from (");
                            for (int i = 0; i < ts.Length - 1; i++)
                            {
                                filter.Append("select OID_T025 from T_025 where '" + ts + "' in (select short_str from dbo.split(F45_T025,',')) union all ");
                            }
                            filter.Append("select OID_T025 from T_025 where '" + ts[ts.Length - 1] + "' in (select short_str from dbo.split(F45_T025,','))");
                            filter.Append(") as tb)");
                        }


这样执行起来效率比较低  跪求好的解决方案

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 许庭洲 于 2012-7-24 11:07 编辑

1,可在后台数据库里,新建一个存储过程PR_F45_T025来解决该SQL语句;
2,CREATE OR REPLACE PROCEDURE SCOTT." PR_F45_T025 " ( )
as
begin
--只要包含 tag 和 月消费2000其中一个的标签全部显示
--  select OID_T025,F5_T025,F45_T025 from T_025 where OID_T025 in( select OID_T025 from T_025 where 'tag' in (select short_str from dbo.split(F45_T025,','))
-- union all
--select OID_T025 from T_025 where '月消费2000' in (select short_str from dbo.split(F45_T025,',')))
);
  COMMIT;
end;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马