首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂的mysql排名!

复杂的mysql排名!
EN

Stack Overflow用户
提问于 2010-04-21 09:31:56
回答 2查看 256关注 0票数 0

我有一个表,列有: win,los,ID...

我想按这个索引对表进行排序: win /( win + los )* 30 + win / SUM(win) * 70,然后找出两个id的排名。我不太擅长mysql,所以我写的是完全错误的。(它使用Perl + DBI + DBD::mysql):

代码语言:javascript
复制
$stmt=$con->prepare("SET @rk := 0");
$stmt=$con->prepare("SELECT rank, id FROM (
                           SELECT @rk := @rk + 1 AS rank,                
                                (win/(win+los)*30+win/SUM(win)*70) AS index,
                                win, los, id 
                          FROM tb_name ORDER BY index DESC) as result 
                   WHERE id=? AND id=?"); 
$stmt -> bind_param ("ii", $id1, $id2);
$stmt -> execute();
$stmt -> bind_result($rk, $idRk); 

还有这个查询,它假设每个用户可能每隔5-10秒运行一次,所以我试图非常非常快地找到一些东西。如果有必要,我可以添加、更改、删除任何列,以便尽可能快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-21 16:41:25

试试这个:

代码语言:javascript
复制
SELECT rank, id FROM (
    SELECT @rk := @rk + 1 AS rank,                
    (win/(win+los)*30+win/win_sum*70) AS index, -- SUM(win) -> win_sum
    win, los, id 
    FROM tb_name,
    (SELECT SUM(win) as win_sum FROM tb_name) as ws -- separated SUM(win)
    ORDER BY index DESC) as result
WHERE id IN (?, ?);    -- id=? AND id=? will never happen, should be OR

('win','los')上的综合指数可能很有用。

票数 1
EN

Stack Overflow用户

发布于 2010-04-21 09:40:19

无论您在SELECT语句中使用什么经验,都可以在ORDER BY表达式中使用。

您还可以为表达式指定一个列别名并按别名排序,就像您所做的那样。

如果您对mysql感到不舒服,那么我建议您自己开发查询,而不是同时尝试将其嵌入到准备好的语句中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2679770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档