gpt4 book ai didi

php - 瑞士排名系统Mysql查询问题

转载 作者:可可西里 更新时间:2023-11-01 08:55:23 25 4
gpt4 key购买 nike

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

以下查询返回按输赢率排序的结果。

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

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

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

**更新我能够弄清楚如何执行查询以选择一个赢/输比高的视频和一个赢/输比低的视频。组合表跟踪每个视频,因此它们不会相互冲突两次。

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

谢谢,泰根斯奈德

最佳答案

按分数对玩家进行排名,并将玩家 2N-1 与玩家 2N 配对,这将是您在 SQL 语句中所能达到的范围。

在 table 外,您必须记录每个玩家玩过谁,玩过哪一轮,这样他们就不会再玩了。对于国际象棋,您必须记录玩家是黑人还是白人,这样您就可以减少必须连续两次下相同颜色的人数,并消除三连胜的情况。如果您的玩家数量为奇数,您将必须记录谁缺席了一轮并被给予“再见”,这样他们就不会被再次选中。

我建议您只将数据读入表格,然后对其进行排序,以便以随机顺序留下相等的分数。然后(如果需要)随机移除一名玩家以退出本轮。你会留下一个玩家列表,他们可能配对 (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)...他们的“家”尽可能多的地方,并尽可能少地移动他们。如果可以,请按顺序搜索,以便找到的第一个解决方案可以接受。

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

关于php - 瑞士排名系统Mysql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com