您的位置:首页> 日志> 动易系统 正文
DTOP

SQL实现前N篇带图片文章置顶

fatdong | 2012年08月01日 |

>>收藏本文 已有 5条评论

 

  上图是我们经常输出的头条图文信息列表,我们在后台发布若干篇文章后,经常会遇到排在最前面的那一篇文章是没有图片的,图片区域只显示一张系统的默认图片。为了保证网站的显示效果,我们一般都是把带图片的文章放到最后发布或给它一个推荐值,如果每次发布文章都要这样搞一下,这真的太麻烦了!

  于是哥就想到了一个办法,就是通过SQL的“ORDER BY”(排序功能)把指定有图片的文章排在最前面。

 

下面是哥的思路:(不看你会后悔的!)

 

第一步:整理SQL,在本地测试方便调试

  在本地的 SQL Server 新建一个查询(这个是在本地建立了测试站的情况下进行的),把标签的SQL查询语句翻译一下,翻译成 SQL Server 能看懂的SQL查询语句在本地测试一下。

  1. SELECT TOP <xsl:value-of select="$_pageSize"/> * FROM PE_CommonModel CM <xsl:value-of select="$_bindModel"/> WHERE CM.Status = 99 AND CM.NodeID IN (<xsl:value-of select="$_nodes"/><xsl:call-template name="_constraint"> 
  2.               <xsl:with-param name="_doubleApos" select="'false'"/> 
  3.             </xsl:call-template> ORDER BY <xsl:value-of select="$_listOrderValue"/> 

  <xsl:value-of select="$_pageSize"/>是输出的数量,随便用个数字替换就可以了;

  <xsl:value-of select="$_bindModel"/>是与指定的模型表联合,在本是测试可以不用管,删除就可以;

  WHERE...ORDER BY 之间是条件语句,这里只是测试,自已随便写一些就可以

  最后得出下面SQL查询语句:

  1. SELECT TOP 10 * FROM PE_CommonModel CM WHERE CM.Status = 99 ORDER BY CM.EliteLevel DESC,CM.UpdateTime DESC,CM.GeneralID DESC 

 

 

第二步:实现指定ID的数据置顶

  百度了一下,果然有这样的SQL查询语句:case when id = [ID值] then 0 else 1 end,把指定ID的数据排到第一。但这个只能指定一个ID值,于是,哥用仅有的一点点SQL知识尝试修改,让它可以支持多ID值,case when id in([ID值01],[ID值02],...then 0 else 1 end

得到的SQL语句:

  1. SELECT TOP 10 * FROM PE_CommonModel CM WHERE CM.Status = 99 ORDER BY case when id in(120,135) then 0 else 1 end, CM.EliteLevel DESC,CM.UpdateTime DESC,CM.GeneralID DESC  

 

  果然,ID=120和ID=135的数据排到前面去了!

 

第三步:如何取得需要置顶的数据ID

  取得带图片文章的ID有两种方法。方法1:自已建一个标签,把符合条件的数据找出来,再通过传值的方式传给“头条图文信息列表”这个标签;方法2:直接写一个SQL查询嵌入到上面的SQL语句,这是一个不错的想法,但对SQL不熟,不知道可不可以。

  试了一下方法2,神了!果然可以!果断用方法2

  1. SELECT TOP 10 * FROM PE_CommonModel CM WHERE CM.Status = 99 ORDER BY case when id in(SELECT TOP 1 * FROM PE_CommonModel CM WHERE CM.Status = 99 AND CM.DefaultPicUrl != '' ORDER BY CM.EliteLevel DESC,CM.UpdateTime DESC,CM.GeneralID DESC ) then 0 else 1 end, CM.EliteLevel DESC,CM.UpdateTime DESC,CM.GeneralID DESC  

 

第四步:声名“_picListOrderTop”变量的值为SQL置顶部分的代码

  这里要注意的是“_picListOrderTop”变量的声名语句一定要在“_constraint”、“_listOrderValue”和“_bindModel”这些变量的声名语句之后,因为要用到这些变量,这个你懂的!

 

第五步:置顶变量的调用

 

总结

  只需把列表类标签做少许的改动,样式类标签不用修改,标签的参数和标签的调用方法跟原来的一样,简单易用!