mysql 记录 行号_如何在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;
当然你也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询,但考虑到临时表在 MySQL master / slave 模式下可能产生的问题,用这样临时用户定义变量的方式来计算查询结果集每一行对应的行号还是更为简洁 -- 除非你愿意在 PHP 或其他语言脚本中对返回的整个结果集再作处理。
【编辑推荐】
【责任编辑:迎迎 TEL:(010)68476606】
点赞 0
mysql 记录 行号_如何在MySQL查询结果集中得到记录行号相关推荐
- 如何在mysql中创建过程_如何在MySQL 中创建存储过程?
问题阐述 自MySQL 5.0 开始,MySQL 就支持存储过程.存储过程是一些被用户定义的SQL 语句集合.一个存储程序是可以被存储在服务器中的一套SQL 语句.存储过程可以被程序.触发器或另一个存 ...
- function在mysql里总是出错_如何在MySQL函数中引发错误
如何在MySQL函数中引发错误 我创建了一个MySQL函数,如果传递给参数的值无效,则想引发一个错误. 在MySQL函数中引发错误我有哪些选择? 6个解决方案 69 votes MySQL 5.5引入 ...
- mysql怎么插入时间_如何在MySQL中插入日期?
在MySQL中插入日期的方法:首先打开脚本文件:然后通过[INSERT INTO tablename (col_name, col_date) VALUE ('DATE: Auto CURDATE() ...
- mysql数据库存歌_如何在mysql中存储音乐和图片文件
标签: 如何在mysql中存储音乐和图片文件? 果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的! 我将告诉你怎样通过HTML表单来储存这 ...
- MySQL怎么展示表格_如何在MySQL数据库中显示表的架构?
从MySQL控制台,什么命令显示任何给定表的架构? #1楼 SHOW CREATE TABLE yourTable; 要么 SHOW COLUMNS FROM yourTable; #2楼 descr ...
- 如何在mysql中创建连接_如何在MySQL中创建新用户并开启远程连接访问?
如何在MySQL中创建新用户并开启远程连接访问? 发布时间:2020-05-21 14:55:19 来源:亿速云 阅读:176 作者:鸽子 下面由mysql教程给大家介绍MySQL创建新用户并开启远程 ...
- vscode 注释多行代码_如何在Visual Studio Code中注释多行?
我找不到在Visual Studio Code中注释和取消注释多行代码的方法. 是否可以使用某些快捷方式在Visual Studio Code中注释和取消注释多行? 如果是,该怎么办? 当其中一行已被 ...
- oracle未选定行大小写_关于Oracle中查询结果为未选定行
今天在做关于Oracle查询语句的练习时,碰到这么一个题目:找出EMP表中姓名(ENAME)第三个字母是A的员工姓名.我的Scott.emp表的现有数据如下: SQL> select * fro ...
- mysql按域排序_如何在MySQL中对域名进行排序?
要对域名进行排序,请使用ORDER BY SUBSTRING_INDEX().让我们首先创建一个表-mysql> create table DemoTable670(DomainName tex ...
最新文章
- 哈啰在分布式消息治理和微服务治理中的实践
- 宁波Uber优步司机奖励政策(12月14日到12月20日)
- 解决: Linux – git: command not found
- LeetCode 1921. 消灭怪物的最大数量(排序)
- 阿里扔给腾讯一个烫手山芋
- jfinal 普通java工程_JFinal getModel方法如何在java项目中使用
- 【JavsScript】作用域链
- HTML5——锚点链接
- RESTClient 使用,一个小巧方便的插件
- 基于腾讯云的物联网云端数据传输-STM32F103C8T6(微信小程序显示数据).一
- 云服务器内存占用多少,腾讯云云服务器CPU或内存占用过高怎么办?
- 在淘宝里,他们总结的一些前端Tips
- 两种有效提高win10电脑开机速度的方法
- glibc 知:手册08:消息翻译
- python学习心得和体会
- Revit平台盗版软件的陷阱与风险
- Linq之IQueryable与IEnumerable
- 论文格式设置-页面设置、页眉页脚、自动生成目录等
- SQLSERVER不借助代理:本地备份、异地备份
- 请求网站响应的文本带有乱码,原来是Content-encoding惹的祸,一文带你搞懂`Content-encoding`、`Accept-Encoding`