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 基础 -- 多表关系(一对一1对多(多对一)多对多)多表查询(内连接外连接自连接子查询(嵌套查询)联合查询 union)笛卡儿积