如果需要在查询语句返回的列中包括一列以指示整个结果集中记录的行号,则ISO SQL: 2003标准建议的方法是提供ROW_NUMBER()/ RANK()函数. Oracle可以使用标准方法(版本8i或更高版本)或非标准ROWNUM. MS SQL Server在2005版中提供了ROW_NUMBER()函数. 但是在MySQL中似乎没有这样的系统内置功能. 尽管LIMIT可以很容易地过滤返回结果集的数量和位置,但是不能选择过滤记录的行号. 据说MySQL很想添加此功能取得查询结果集总数的函数是?,但我没有找到它.
解决方案是使用预定义的用户变量:
复制代码,代码如下:
设置@mycnt = 0;
选择(@mycnt: = @mycnt + 1)作为ROWNUM,从tblname顺序按othercol顺序选择othercol;
行号信息保存在查询结果集中的ROWNUM中. 该行编号信息的目的是当您需要根据需要根据某些规则对数据进行排序并在排序后取出一行数据时,并且您想知道该行数据在上一次排序中的位置. 例如:
复制代码,代码如下:
设置@mycnt = 0;
从(
选择(@mycnt: = @mycnt + 1)作为ROWNUM,othercol
从其他名称的tblname顺序开始
)为A,其中othercol = OneKeyID;
当然,您还可以通过创建临时表,然后执行查询取得查询结果集总数的函数是?,将查询结果写入具有auto_increment字段的临时表中,但要考虑到临时表在MySQL主/从模式下可能存在的问题,除非您愿意处理用PHP或其他语言脚本返回的整个结果集,否则使用此临时用户定义变量将更简洁地计算与查询结果集的每一行相对应的行号.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-165187-1.html