视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MYSQL显示行号排序、同张表数据排序上下进行比较
2020-11-09 08:42:05 责编:小采
文档


说明:

这里用到了@,最开始我也不知道这是什么东西,然后我搜索mysql行号查到使用自定义变量(mysql特性)进行排序显示

参考博客:

SQL Server查询行号
MYSQL rownum 实现
MYSQL 自定义变量使用(推荐)

  • 需求

    1. 需要查询小说是否有断更,小说章节信息表中有发布时间:pub_time,如果发布时间间隔超过三天就算断更

  • 思路

    1. 查询小说章节信息表,将章节信息按照发布时间排序,加上行号。生成table1 和table2 信息一样

    2. left join 关联查询,table1行号为 n 与 table2行号为n+1的数据发布时间比较,如果存在大于三天则说明断更

  • 准备工作

  • 章节表:

    CREATE TABLE `t_chapter` ( `id` varchar(255) NOT NULL COMMENT '主键', `auto_code` varchar(255) NOT NULL COMMENT '编号', `production_number` varchar(11) NOT NULL COMMENT '作品编号', `pub_time` datetime DEFAULT NULL COMMENT '发布时间', PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 开始

    1. 对章节表根据发布时间升序排序并显示行号

     SELECT
     t.auto_code ,
     t.id ,
     t.production_number ,
     t.pub_time ,
     (@rowNum :=@rowNum + 1) AS rowNo FROM
     t_chapter t ,
     (SELECT(@rowNum := 0)) b WHERE 
     t.production_number = 1414(指定作品) ORDER BY
     t.pub_time ASC

    查询结果已经按照发布时间排序

  • 关联查询

  •  SELECT
     count(1) FROM
     ( SELECT
     t.auto_code ,
     t.id ,
     t.production_number ,
     t.pub_time ,
     (@rowNum :=@rowNum + 1) AS rowNo FROM
     t_chapter t ,
     (SELECT(@rowNum := 0)) b WHERE
     t.production_number = 979 
     ORDER BY
     t.pub_time ASC
     ) table1 INNER JOIN( SELECT
     t.auto_code ,
     t.id ,
     t.production_number ,
     t.pub_time ,
     (@a :=@a + 1) AS rowNo FROM
     t_chapter t ,
     (SELECT(@a := 0)) b WHERE
     t.production_number = 979
     ORDER BY
     t.pub_time ASC
     ) table2 ON table1.rowNo + 1 = table2.rowNo 
     WHERE
     timestampdiff(DAY , table2.pub_time , table1.pub_time) > 3;

    如果查询count>0则作品编号为979的作品存在断更,更多条件可以依据自己业务而定

    说明:

    这里用到了@,最开始我也不知道这是什么东西,然后我搜索mysql行号查到使用自定义变量(mysql特性)进行排序显示

    相关文章:

    c语言中冒泡排序、插入排序、选择排序算法比较

    插入排序 排序算法学习-插入排序

    相关视频:

    数据库mysql视频教程

    下载本文
    显示全文
    专题