zoukankan      html  css  js  c++  java
  • 使用原生Sql查询实现按分类推送最新文章到首页

     一般在网站的首页都会有网站最新文章的推送,而这些文章又属于不同的分类。如果某个分类的文章突然集中在一个时间段发布,那么就会造成首页上所有文章都是该分类的文章,其他的文章分类就变成不可见的了。所以,我希望能对它进行改进。

    思路

        网站中一旦有最新的文章发布那么该文章及其分类就会推送到网站的首页,如果在该分类下又有新的文章发布,那么后发布的文章会替换先发布的文章。每个分类可以推送不多于N篇文章。

    解决方法

        为了解决该问题我首先想到了使用Group BY,让所有文章按照分类号来分组,然后按照发布时间来降序排列。

    sql代码可表示为:

    select * from tb_blog group by 分类号 order by 发布时间 desc

        然而,这样做了以后我发现,虽然文章按照分类号分组了,也就是每个分类号只有一篇文章在结果集中,但是,由于先分组然后按发布时间降序排序,这就导致了先按照分类号进行了升序排列,在此基础上再按时间降序,这就导致了最新发布的文章不一定会出现在首页。看来问题并不像想的那么简单。

    解决方法

    经过一天的苦苦查找和多次尝试,终于找到了解决方法,以下的SQL语句可以用于向首页按分类推送最新发表的N篇文章的集合(10篇),代码如下:

    select a1.文章名称 ,a1.发布时间,a1.分类号,a1.文章ID
          from 文章表 a1 inner join (
          select a.分类号,a.发布时间,a.文章ID from 文章表 a
          left join 文章表 b on a.分类号=b.分类号
          and a.发布时间<=b.发布时间 group by
          a.分类号,a.发布时间 having count(distinct(b.发布时间))<=N //使用Distinct处理同时发布
          //文章
          ) b1 on a1.文章ID=b1.文章ID  
          order by a1.发布时间 desc limit 10

    注意上述代码中加入了文章发布时间相同情况下的甄别功能(想想为什么要这么做?期待着与您的交流),大家有时间的话,可以自己在纸上推演一下整个过程。亲测,代码可用。如果您遇到类似问题,一定会有所帮助。如果您有更好的方法,也可以给我留言。

    本文首发于 顶求网,转载请注明来源。

  • 相关阅读:
    ubuntu下Thrift快速入门
    java Future用法和意义一句话击破 [转]
    RPC、基于netty的长连接和websocket
    基于netty的长连接
    IO
    HTML5 中websocket长连接的具体实现方法
    单链表中是否出现环状,使用快慢指针算法。
    SpringMVC 事务配置完全详解
    hibernate annotation 一对多,多对一,实例
    tomcat 内存溢出
  • 原文地址:https://www.cnblogs.com/nerd/p/5727695.html
Copyright © 2011-2022 走看看