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

开发中做一个活动,需要计算出注册用户的排名的百分比。

当我们按某些条件来排序用户的时候,就需要知道这些查询结果的行号。

但是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) . '%';
}

这样就可以计算出用户排名的百分比来了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值