mysql 5.6 实现排名(多表联合查询)

Posted 胖无敌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 5.6 实现排名(多表联合查询)相关的知识,希望对你有一定的参考价值。

需求:成就排行榜功能

实现:

简单介绍下表设计:

user_achievement 用户成就表

user  用户表

achievement 成就表

 

以下sql无序号返回:

SELECT SUM(a.achievement_num) top_number,b.nick_name,b.sex,b.birth_day,b.head_img
    FROM user_achievement a
    LEFT JOIN user b ON a.user_id = b.id
    GROUP BY a.user_id
    ORDER BY top_number desc

结果:

解决办法如下:

定义变量i,内连接初始化变量i为0,保证每次查询变量都会重新计算一次

SELECT t.*,(@i:=@i+1) AS id 
FROM (SELECT SUM(a.achievement_num) top_number,b.nick_name,b.sex,b.birth_day,b.head_img
    FROM user_achievement a
    LEFT JOIN user b ON a.user_id = b.id
    GROUP BY a.user_id
    ORDER BY top_number DESC) t
   INNER JOIN (SELECT @i:= 0) tt

结果:

以上是关于mysql 5.6 实现排名(多表联合查询)的主要内容,如果未能解决你的问题,请参考以下文章

mysql 5.6 实现排名(多表联合查询)

mysql 5.6 实现排名(多表联合查询)

mysql 多表联合查询啥用

mysql 多表联合查询语句怎么写

MySQL增删改查之多表联合查询

MySQL 基础 -- 多表关系(一对一1对多(多对一)多对多)多表查询(内连接外连接自连接子查询(嵌套查询)联合查询 union)笛卡儿积