SQL实现前N篇带图片文章置顶
上图是我们经常输出的头条图文信息列表,我们在后台发布若干篇文章后,经常会遇到排在最前面的那一篇文章是没有图片的,图片区域只显示一张系统的默认图片。为了保证网站的显示效果,我们一般都是把带图片的文章放到最后发布或给它一个推荐值,如果每次发布文章都要这样搞一下,这真的太麻烦了!
于是哥就想到了一个办法,就是通过SQL的“ORDER BY”(排序功能)把指定有图片的文章排在最前面。
下面是哥的思路:(不看你会后悔的!)
第一步:整理SQL,在本地测试方便调试
在本地的 SQL Server 新建一个查询(这个是在本地建立了测试站的情况下进行的),把标签的SQL查询语句翻译一下,翻译成 SQL Server 能看懂的SQL查询语句在本地测试一下。
- 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">
- <xsl:with-param name="_doubleApos" select="'false'"/>
- xsl:call-template> ORDER BY <xsl:value-of select="$_listOrderValue"/>
是输出的数量,随便用个数字替换就可以了;
是与指定的模型表联合,在本是测试可以不用管,删除就可以;
WHERE...ORDER BY 之间是条件语句,这里只是测试,自已随便写一些就可以
最后得出下面SQL查询语句:
- 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语句:
- 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
- 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”这些变量的声名语句之后,因为要用到这些变量,这个你懂的!
第五步:置顶变量的调用
总结
只需把列表类标签做少许的改动,样式类标签不用修改,标签的参数和标签的调用方法跟原来的一样,简单易用!
用户登录
还没有账号?
立即注册