• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MYSQL显示行号排序、同张表数据排序上下进行比较

MYSQL显示行号排序、同张表数据排序上下进行比较

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了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

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

  • 关联查询

    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特性)进行排序显示

参考博客:

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

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

  • 关联查询

    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视频教程

以上就是MYSQL显示行号排序、同张表数据排序上下进行比较的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05找出所有非xml索引并重新整理的sql
  • 2017-05-11在MySQL中使用通配符时应该注意的问题
  • 2018-12-05MySQL索引不生效的解决办法
  • 2018-12-05Centos7安装 mysql5.6.29 shell脚本的示例代码分享
  • 2017-05-11mysql下完整导出导入实现方法
  • 2018-12-05mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
  • 2018-12-05oracle命令行删除与创建用户的代码
  • 2018-12-05MySQL 查找价格最高的图书经销商的几种SQL语句
  • 2017-05-11PHP学习之SQL语句快速入门
  • 2018-12-05关于mysql_free_result的10篇文章推荐

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL Sleep连接过多问题解决方法
    • Mysql与Oracle分页的区别详解
    • 物理分页与逻辑分页的实例教程
    • 在sql Server自定义一个用户定义星期函数
    • asp+mysql+utf8 网页出现乱码问题的解决方法
    • MySQL和相关的timeout详细解析
    • limit Mysql查询语句使用方法
    • MySQL 随机密码生成代码
    • MySQL常用基本操作
    • sqlserver FOR XML PATH 语句的应用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有