网站公告列表     抗震救灾前线急需物品清单以及捐款方法  [lwyx  2008年5月16日]            我站正在进行双线测试,网通空间地址为http://www1.52wyx.com.欢迎您的使用!  [lwyx  2007年7月23日]            庆祝我站图形图象及站长在线查询工具(下载)栏目开通!  [五月雪电脑教程网  2007年5月21日]            努力打造国内最新最快最丰富的软件信息开放平台!一直致力于提供新鲜、全面、专业的软件信息和知识。软件资讯,无限精彩!  [五月雪  2006年2月23日]            新版本进入测试阶段,请各位网友多提宝贵意见!  [管理员  2006年1月24日]        
加入收藏
设为首页
繁體中文
您现在的位置: 五月雪电脑教程网 >> 数据库 >> MY Sql >> 正文
如何在MySQL查询结果集中得到记录行号          
如何在MySQL查询结果集中得到记录行号
作者:佚名 文章来源:本站原创 点击数: 更新时间:2008-5-16 6:57:38
关键字信息载入中...
广告载入中...

如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, 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 或其他语言脚本中对返回的整个结果集再作处理。

文章录入:llm64    责任编辑:lwyx 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网 络 热 门
    网络热门信息载入中...
    最 新 热 门
    最新热门信息载入中...
    最 新 推 荐
    最新推荐信息载入中...
    相 关 文 章
    相关文章信息载入中...
    相 关 评 论
    相关评论信息载入中...

    Copyright @ 2005 2006 五月雪电脑教程网
    中华人民共和国信息产业部ICP备案号: 闽ICP备 05014026
    教程网技术支持:QQ:75484101 友情提供
    统计进行中...统计进行中...

    如何将MySQL数据库迁移到…
    在MySQL数据库中应当如何…
    Mysql 1067 错误 解决办…
    怎样在Oracle数据库中实…
    MySQL中与NULL值有关的疑…
    MySQL数据库搜索中大小写…
    支持MySQL数据库的操作系…
    正确的编写高质量高性能…
    提高MySQL数据库查询效率…
    安装完MySQL数据库后 还…
     姓 名:
     评 分:
    1分 2分 3分
    4分 5分
     内 容: