账号通
    

账号  

密码  

18841

查看

27

回复
主题:SQL标签支持往SQL语句的in传逗号隔开的参数修改方法 [收藏主题] 本贴被认定为精华 转到:  
科汛官方 当前离线

47268

主题

145

广播

405

粉丝
添加关注
级别:管理员

用户积分:101604 分
登录次数:7935 次
注册时间:2006/12/7
最后登录:2023/12/14
科汛官方 发表于:2012/8/24 17:40:37   | 只看该作者 查看该作者主题 楼主 
科汛在线商城系统(NET)

至今为止,sql标签无法给类似下面语句的in里传多个参数


select top 10 id,title from ks_article where tid in({$Param(0)}) order by id desc


原因是,科汛的sql标签,如果传多个参数时,本身就是用逗号隔开的,如


{SQL_标签名称(参数1,参数2...,参数n)}


下面我给大家修改思路,就是我们如果要传带逗号的参数,那么我们用其它的字符替换,等到sql语句解释时,再替换回来,如下调用方式。


{SQL_标签名称('20097062465721'|'20097082279507',参数2,...,参数n)



接下来我们就动手操作,以9.0版本为例说明:


第一步:


打开ks_cls/kesion.label.sqlcls.asp,找到183行


UserParamArr = Split(Replace(Replace(Replace(Replace(SqlLabel,LabelName&"(",""),")}",""),"""",""),"'",""),",")


改为

UserParamArr = Split(Replace(Replace(Replace(SqlLabel,LabelName&"(",""),")}",""),"""",""),",")


这个原来过滤了单引号了,由于我们可能在使用sql in时,传的参数可能是字符型的,必须带有单引号,特别是科汛的主表的栏目ID都是字符型的,参数都必须带单引号的,如


select top 10 id,title from ks_article where tid in('20097062465721','20097082279507') order by id desc


第二步:


同样这个文件里,我们找到214行


FunctionSQL  = Replace(FunctionSQL,"{$Param("&I&")}",UserParamArr(I),1,-1,1)


改为

FunctionSQL  = Replace(FunctionSQL,"{$Param("&I&")}",Replace(UserParamArr(I),"|",","),1,-1,1)



第三步:

这样前台的标签解释就修改完成了,接下来打开admin/indclue/LabelSQL.asp

找到1624行

function ClearParam(byval SqlStr)
      Dim I
   For I=0 To 100
    SqlStr=Replace(SqlStr,"{$Param(" & I & ")}",1)
   Next
    SqlStr=Replace(SqlStr,"{$CurrClassChildID}","'1'")
    SqlStr=Replace(SqlStr,"{$CurrChannelID}",1)
    SqlStr=Replace(SqlStr,"{$CurrClassID}",1)
    SqlStr=Replace(SqlStr,"{$CurrInfoID}",1)
    SqlStr=Replace(SqlStr,"{$CurrSpecialID}",1)
    SqlStr=Replace(SqlStr,"{$GetUserName}",1)
    ClearParam=ReplaceRequest(SqlStr)
   exit function
End function


直接将以上代码替换为


function ClearParam(byval SqlStr)
      sqlstr=Lcase(sqlstr)
      if instr(SqlStr,"where")<>0 then sqlstr=split(SqlStr,"where")(0)
      Dim I
   For I=0 To 100
    SqlStr=Replace(SqlStr,"{$param(" & I & ")}",1)
   Next
    SqlStr=Replace(SqlStr,"{$currclasschildid}","'1'")
    SqlStr=Replace(SqlStr,"{$currchannelid}",1)
    SqlStr=Replace(SqlStr,"{$currclassid}",1)
    SqlStr=Replace(SqlStr,"{$currinfoid}",1)
    SqlStr=Replace(SqlStr,"{$currspecialid}",1)
    SqlStr=Replace(SqlStr,"{$getusername}",1)
    ClearParam=ReplaceRequest(SqlStr)
   exit function
     End function






经过上面三步修改,你的sql标签可以使用带逗号的参数的了。


以下应用实例。


我们可以根据sql标签调用指定几个栏目的最新文章,如sql语句


select top 10 id,title from ks_article where tid in({$Param(0)}) order by id desc


模板里调用


{SQL_标签名称('20097062465721'|'20097082279507'|'20093308484295')



再比如,调用指定几个会员的用户信息


sql语句


select userid,username,realname from ks_user where userid in({$Param(0)}) order by userid


模板里调用


{SQL_标签名称(2|3|4)}

 
KesionCMS,,
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
潜水鱼_201159 当前离线

143

主题

1

广播

5

粉丝
添加关注
级别:一年级

用户积分:330 分
登录次数:74 次
注册时间:2011/5/9
最后登录:2016/6/7
潜水鱼_201159 发表于:2012/8/24 17:48:37   | 只看该作者 查看该作者主题 沙发 
科汛在线商城系统(NET)

果然是神贴 74515833科讯技术交流群。++哦
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
suncohey 当前离线

477

主题

29

广播

10

粉丝
添加关注
级别:版主

用户积分:1721 分
登录次数:920 次
注册时间:2009/11/23
最后登录:2019/1/11
suncohey 发表于:2012/8/24 17:53:13   | 只看该作者 查看该作者主题 藤椅 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
wm1201 当前离线

35

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:26 分
登录次数:4 次
注册时间:2012/8/7
最后登录:2012/8/25
wm1201 发表于:2012/8/25 15:57:36   | 只看该作者 查看该作者主题 板凳 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
licaifuwu 当前离线

653

主题

10

广播

17

粉丝
添加关注
级别:六年级

用户积分:1585 分
登录次数:361 次
注册时间:2010/11/19
最后登录:2019/5/7
licaifuwu 发表于:2012/8/26 10:53:39   | 只看该作者 查看该作者主题 报纸 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
bjcjy1001 当前离线

6

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:9 分
登录次数:2 次
注册时间:2012/8/26
最后登录:2012/8/30
bjcjy1001 发表于:2012/8/26 16:53:18   | 只看该作者 查看该作者主题 地板 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
wlwlycl 当前离线

1537

主题

23

广播

7

粉丝
添加关注
级别:高一年

用户积分:6647 分
登录次数:587 次
注册时间:2007/1/6
最后登录:2021/7/14
wlwlycl 发表于:2012/8/27 17:19:44   | 只看该作者 查看该作者主题 7楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
xyy123 当前离线

96

主题

40

广播

2

粉丝
添加关注
级别:学前班

用户积分:140 分
登录次数:99 次
注册时间:2012/7/31
最后登录:2014/4/2
xyy123 发表于:2012/8/27 17:25:53   | 只看该作者 查看该作者主题 8楼 
科汛在线商城系统(NET)
好贴啊!佩服,太好了!
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一路随笔 当前离线

7

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:10 分
登录次数:2 次
注册时间:2012/8/27
最后登录:2012/9/19
一路随笔 发表于:2012/8/27 17:27:32   | 只看该作者 查看该作者主题 9楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
一路随笔 当前离线

7

主题

0

广播

0

粉丝
添加关注
级别:学前班

用户积分:10 分
登录次数:2 次
注册时间:2012/8/27
最后登录:2012/9/19
一路随笔 发表于:2012/8/27 17:27:47   | 只看该作者 查看该作者主题 10楼 
 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行8.00098秒 powered by KesionCMS 9.0