`

在MySQL查询结果集中得到记录行号

阅读更多

如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL Server 则在 2005 版本中提供了 ROW_NUMBER() 函数;但在 MySQL 中似乎还没有这样的系统自带功能。虽然 LIMIT 可以很方便的对返回的结果集数量和位置进行过滤,但过滤出来的记录的行号却没办法被 SELECT 到。据说 MySQL 是早就想增加这个功能了,但我是还没找到。 

解决方法是通过预定义用户变量来实现: 

set @mycnt = 0; 
select (@mycnt := @mycnt + 1) as ROWNUM , othercol from tblname order by othercol; 

这样查询出来的结果集中 ROWNUM 就保存了行编号信息。这个行编号信息的某种用途在于当你需要根据需要对数据按照某种规则排序并取出排序之后的某一行数据,并且希望知道这行数据在之前排序中的位置时就用得着了。比如: 

set @mycnt = 0; 
select * from ( 
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol 
     from tblname order by othercol 
) as A where othercol=OneKeyID; 


注意:以上语句在mysql4中只能执行: 

select * from ( 
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol 
     from tblname order by othercol 


不能执行: 

set @mycnt = 0; 
select * from ( 
    select (@mycnt := @mycnt + 1) as ROWNUM , othercol 
     from tblname order by othercol 
) as A where othercol=OneKeyID; 

在mysql5中可以执行整条语句; 

当然你也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询,但考虑到临时表在 MySQL master / slave 模式下可能产生的问题,用这样临时用户定义变量的方式来计算查询结果集每一行对应的行号还是更为简洁 -- 除非你愿意在 PHP 或其他语言脚本中对返回的整个结果集再作处理。 

分享到:
评论

相关推荐

    MySQL中在查询结果集中得到记录行号的方法

    主要介绍了MySQL中在查询结果集中得到记录行号的方法,本文解决方法是通过预定义用户变量来实现,需要的朋友可以参考下

    MYSQL获取行号row_no

    介绍Mysql如何获得结果集的行号的几种方法,类似oracle的Row_no,当然有一定的局限性。请朋友们自己体会,呵呵。

    大额行名行号查询系统

    大额行名行号查询系统大额行名行号查询系统

    行名行号查询2011.08管理员版

    行名行号查询,更模糊更快捷的查询. 增加了数据库管理功能,导入数据格式说明参考压缩包中说明文件,方便有数据源的朋友导入数据,并上传、下载数据。 更新了行号数据库2011.06,共计117209条记录。支持一键粘贴。

    行名行号查询

    行名行号查询工具.rar

    全国银行行号查询.xls

    全国银行行号查询

    现代化支付行名行号表查询

    人民银行现代化支付系统中各省市行名行号表查询软件

    为文本增加行号和去掉行号

    本程序可以为程序增加行号和去掉行号,在排版文档时,有时需要增加行号,有时需要去掉行号,使用该程序可以实现。

    去掉源码行号 去除行号

    去掉源码行号 去除行号 从网页上复制源代码有的带行号,使用该工具可以去除行号

    VC行号显示插件 VC显示行号

    VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC行号显示 VC...

    oracle导出sql语句的结果集和保存执行的sql语句(深入分析)

    您可能感兴趣的文章:MySQL中在查询结果集中得到记录行号的方法PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解sql 查询记录数结果集某个区间内记录JavaWeb dbutils执行sql命令并遍历结

    银行个支行分行总行,行名行号查询工具

    银行个支行分行总行,行名行号查询工具。 VB写的

    『MySQL』行号关联查询

    前段时间碰到过这样一个问题,查询出一家店铺在2020年和2019年活动类型为’xxx’的日期,因历史原因,2019年的活动和2020年的活动分别存储在两张表中,需要通过外连接将查询结果放在一起展示,最终要的结果大概长...

    VC6.0显示行号的工具.rar

    VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号的工具,不占资源。VC6.0显示行号...

    全国银行行号数据库

    全国银行行号数据库,这可是从银行内部得来的,希望对大家有用

    vc6.0显示行号

    VC6.0显示行号的插件,很好很强大的显行号插件,使用VC6.0编程的朋友再也不用烦恼没有行号的编程环境了。 VC显示行号插件使用说明: 1. 如果你的VC安装在C盘,请拷贝文件VC6LineNumberAddin.dll到如下目录: C:\...

    C#获取当前代码行号

    C#获取当前行号,可以查看程序的执行顺序

    全国各大银行联行号mysql.sql

    全国各大银行联行号,包含联行号,开户行名称、开户行行号、网点、归属地,约13.7万条。mysql导入数据。

    一个RichTextBox 自动加行号的程序

    一个RichTextBox 自动加行号的程序,非常好用.

Global site tag (gtag.js) - Google Analytics