繁体   English   中英

瑞士排名系统Mysql查询问题

[英]Swiss Ranking System Mysql Query Question

我正在创建一个视频排名网站。 每个视频在比赛中与另一个视频对比。 然后用户前进到下一场比赛。

以下查询返回按损失率排序的结果。

SELECT v.id, v.wins, v.loses, v.wins / v.loses AS win_loss_ratio
FROM video
WHERE v.id NOT 
IN (
SELECT h.competitorid
FROM video AS v, comphistory AS h
WHERE v.id = h.id
)
ORDER BY win_loss_ratio DESC 
LIMIT 0 , 2

结果如下:

id      wins        loses       win_loss_ratio
73      7       2           3.5000
104     5       2           2.5000

我正试图找出一种方法来配对类似于瑞士锦标赛方法的视频。 http://en.wikipedia.org/wiki/Swiss-system_tournament

它的工作原理是将上半部分与下半部分配对。 例如,如果有8个视频返回我的查询,我希望它安排,以便视频编号1与编号5配对,编号2与编号6配对,依此类推。

有人建议修改我的查询以按顺序排列视频吗?

**更新我能够弄清楚如何执行查询,选择一个具有高赢/输率的视频和一个具有低赢/输率的视频。 comphistory表跟踪每个视频,因此它们不会相互反对两次。

SELECT videos. * 
FROM (
    SELECT videos.id, videos.wins/videos.loses as win_loss_ratio 
    FROM videos
    WHERE 
    videos.videoid NOT IN (
        SELECT h.id FROM videos AS video, comphistory as h WHERE video.id = h.id
        )
    ORDER BY win_loss_ratio ASC 
    LIMIT 0 , 1
) videos
UNION SELECT DISTINCT videos. * 
FROM (
    SELECT videos.id, videos.wins/videos.loses as win_loss_ratio 
    FROM videos
    WHERE 
    videos.videoid NOT IN (
        SELECT h.id FROM videos AS video, comphistory as h WHERE video.id = h.id
        )
    ORDER BY win_loss_ratio DESC 
    LIMIT 0 , 1
) videos

谢谢,Tegan Snyder

按分数对玩家进行排名,并将玩家2N-1与玩家2N配对将大约在SQL语句中得到。

在桌子外面,你必须记录每个玩家的玩家以及哪一轮,所以他们不会再次互相比赛。 对于国际象棋,您必须记录玩家是黑色还是白色,这样您就可以减少必须两次运行相同颜色并且消除三对一场景的人数。 如果你有一个奇数的球员,你将必须记录谁已经坐了一轮并被给予“再见”,这样他们就不会再次被选中。

我建议你只需将数据读入表中,然后对其进行排序,使得您以随机顺序保留相同的分数。 然后(如果需要)随机移除一名玩家以坐下这一轮。 你将留下一个可能配对的球员名单(1,2)(3,4)(5,6)......等等。 然而,这个简单的方法可能会失败,因为之前已经遇到过,或者它会产生颜色规则的冲突等。当发生这种情况时,你需要一种方法来搜索可能的解决方案,尽可能慢地扩大搜索空间,直到找到解决方案。

例如,(继续上面的例子),如果3和4已经满足,你可以尝试(1,3)(2,4)(5,6)......和(1,2)(3,5) (4,6)......在尝试其他更远的排列之前,例如(1,3)(2,5)(4,6)......“最佳”解决方案将涉及将少数人从他们的“家”移开“尽可能地放置它们,尽可能少地移动它们。 如果可以,请按顺序搜索,以便找到找到的第一个解决方案。

另一种方法是生成所有排列,检查它们是否解决了问题并对找到的解决方案进行评分,这样您就可以保持迄今为止最好的排列。 最后,你将拥有最好的解决方案,但是这样的搜索将花费更长的时间来搜索智能并停止在第一个解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM