今天主要与大家分享的是MySQL数据排名与指定条件数据排名的获取,数据的排名在我们做用户的排序或者其它排序的时候是比较常见的,当然也可以通过其它处理方式来进行数据排名的计算。这里我们主要与大家分享的是MySQl中的SQL语句的排名处理
现有一个发帖统计表结构:
CREATE TABLE `answers`.`posting_static` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NULL DEFAULT '',
`post` int(11) NULL DEFAULT 0,
`created_at` timestamp NULL,
`updated_at` datetime NULL,
PRIMARY KEY (`id`)
);
数据实示例:
我们要取得全部用户的发帖量的排行,怎么进行捏?
首先我们需要对用户的发帖量进行排序,对排序后的结果进行编号(也可以先查询后排序再编号),这个编号就是我们需要的排名,那么这个编号怎么编呢?
在Mysql中我们可以借助 @rownum 来实现,
@rownum := @rownum + 1 中 := 是赋值的作用,意思是先执行@rownum + 1,然后把值赋给@rownum。
(SELECT @rownum := 0) r 这句话的意思是设置rownum字段的初始值为0,即编号从1开始。
所有数据实现SQL:
SELECT a.*, @rownum := @rownum + 1 AS rank FROM (SELECT @rownum := 0) r, `posting_static` AS a ORDER BY a.post DESC;
按条件获取获取单个用户的排名:
SELECT b.* SELECT FROM(SELECT a.*, @rownum := @rownum + 1 AS rank FROM (SELECT @rownum := 0) r, `posting_static` AS a ORDER BY a.post DESC) as b where b.`username` = '王五';