MySQL中在查询结果集中得到记录行号的方法
2016-11-03 16:35
405 查看
开发中做一个活动,需要计算出注册用户的排名的百分比。
当我们按某些条件来排序用户的时候,就需要知道这些查询结果的行号。
但是MySQL 中似乎还没有像SQL Server 在 2005 版本中提供了 ROW_NUMBER() 函数。
因此我们只能通过预定义用户变量的方法来曲线实救国。
sql语句如下:
mysql> set @mycnt = 0;
mysql> select 字段名1,字段名2,(@mycnt := @mycnt + 1) as ROWNUM from 表名 WHERE + 帅选条件;
为了方便,我们通常将两句合起来执行,以避免变量全局自增:
sql语句如下:
mysql> set @mycnt = 0; select 字段名1,字段名2,(@mycnt := @mycnt + 1) as ROWNUM from 表名 WHERE + 帅选条件;
这样查询出来的结果集之中的ROWNUM就保存了行编号信息。
当然,也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询。
eg:以yii框架为例
$sql = "set @mycnt = 0;select name,phone,age,reg_time,(@mycnt := @mycnt + 1) AS ROWNUM from member where status='on' order by reg_time asc";
$result = Yii::app()->db->createCommand($sql)->queryAll();
$totalCount = count($result);
$percent = "0%";
if($totalCount > 0){
$percent = sprintf("%.2f", (($totalCount - $result['ROWNUM']) / $totalCount) * 100) . '%';
}
当我们按某些条件来排序用户的时候,就需要知道这些查询结果的行号。
但是MySQL 中似乎还没有像SQL Server 在 2005 版本中提供了 ROW_NUMBER() 函数。
因此我们只能通过预定义用户变量的方法来曲线实救国。
sql语句如下:
mysql> set @mycnt = 0;
mysql> select 字段名1,字段名2,(@mycnt := @mycnt + 1) as ROWNUM from 表名 WHERE + 帅选条件;
为了方便,我们通常将两句合起来执行,以避免变量全局自增:
sql语句如下:
mysql> set @mycnt = 0; select 字段名1,字段名2,(@mycnt := @mycnt + 1) as ROWNUM from 表名 WHERE + 帅选条件;
这样查询出来的结果集之中的ROWNUM就保存了行编号信息。
当然,也可以通过创建临时表的方法把查询结果写到某个拥有 auto_increment 字段的临时表中再做查询。
eg:以yii框架为例
$sql = "set @mycnt = 0;select name,phone,age,reg_time,(@mycnt := @mycnt + 1) AS ROWNUM from member where status='on' order by reg_time asc";
$result = Yii::app()->db->createCommand($sql)->queryAll();
$totalCount = count($result);
$percent = "0%";
if($totalCount > 0){
$percent = sprintf("%.2f", (($totalCount - $result['ROWNUM']) / $totalCount) * 100) . '%';
}
这样就可以计算出用户排名的百分比来了。
相关文章推荐
- MySQL中在查询结果集中得到记录行号的方法
- MySQL中在查询结果集中得到记录行号的方法
- MySQL中在查询结果集中得到记录行号的方法
- MySQL查询结果集中得到记录行号的实现
- 如何在MySQL查询结果集中得到记录行号
- 在MySQL查询结果集中得到记录行号
- 如何在MySQL查询结果集中得到记录行号
- 如何在MySQL查询结果集中得到记录行号
- mysql 在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号
- MySQL的学习(1)查询结果带行号的方法
- 应用mysql_num_rows()函数获取查询结果集中的记录数
- mysql使用rand随机查询记录的高效率方法
- *关于如何得到查询记录的条数的方法^_^*
- mysql 查询某字段里含有(或者不含)某字符的所有记录方法
- MSSQL和MYSQL中select where in的查询结果按where条件顺序排序的方法
- MySQL查询及删除重复记录的方法
- 判断是否存在在父结果集中有而在子结果集中没有的记录的最佳方法
- mysql 查询结果,字符串在.net中变成System.Byte[] 解决方法
- MySQL查询及删除重复记录的方法
- MySQL查询及删除重复记录的方法