mysql求游戏排名
伊谢尔伦
伊谢尔伦 2017-04-17 16:19:52
0
5
615
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(5)
洪涛
select user_id,a.sc,min(created_at) tm 
from (select user_id,max(score) sc from active_gamescore group by user_id) a 
join active_gamescore b 
on a.user_id=b.user_id and a.sc=b.score 
group by a.user_id,a.sc 
order by a.sc desc,tm asc limit 20;
左手右手慢动作

select t.userid,t.score from (select * from active_gamescore order by score desc,created desc) as t group by t.userid limit 20;

巴扎黑

更新:
一个人只能回复一次,很忧伤
感谢几位抽出时间去帮我解题
测试了一下(5次平均)

在1w数据量的情况下,
@clcx_1315 :0.004s
@伊拉克 : 0.009s
@邢爱明 :0.006s
我自己的 :0.016s

在20w的数据量下:
@clcx_1315 :0.104s
@伊拉克 : 0.141s
@邢爱明 :0.165s
我自己的 :0.171s

所以@clcx_1315的方法最优,十分感谢,学到了一个思路。
从explain看,@clcx_1315的写法只做了2次全表遍历,其他都是3次,或许这就是原因了。

===========================之前的分隔线============================
琢磨了一种写法,但效率有待提高

select ta.user_id,ta.max_score,tb.min_time
from (
        select a.user_id, max(a.score) max_score from  active_gamescore a where  a.active_id='58' group by a.user_id
        ) ta
join (
        select a.user_id,a.score,min(a.created_at) min_time from active_gamescore a where  a.active_id='58' group by a.user_id,a.score
        ) tb 
        on ta.user_id=tb.user_id and ta.max_score=tb.score

order by ta.max_score desc,tb.min_time asc 
limit 20
小葫芦

假设同一用户下的created_at字段值不重复,可以试试下面的语句:

SELECT t1.user_id, t1.score, t1.created_at
FROM (
        SELECT
            @row_num:=IF(@prev_col1=t.user_id, @row_num+1, 1) AS row_number,
            t.*,
            @prev_col1:=t.user_id
        FROM (SELECT * FROM active_gamescore ORDER BY user_id, score DESC, created_at) t,
             (SELECT @row_num:=1, @prev_col1:=NULL) var
) t1 WHERE row_number = 1
ORDER BY t1.score DESC, t1.created_at
LIMIT 20
洪涛
SELECT
    yws0.user_id,
    yws0.score,
    min(create_time) AS create_time
FROM
    active_gamescore yws0
WHERE
    (user_id, score) IN (
        SELECT
            yws.user_id,
            yws.max_score
        FROM
            (
                SELECT
                    user_id,
                    max(score) AS max_score
                FROM
                    active_gamescore
                GROUP BY
                    user_id
            ) yws
    )
GROUP BY
    yws0.user_id,
    yws0.score
ORDER BY
    SCORE DESC
LIMIT 3
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!