jjzjj

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

coder 2023-10-26 原文

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

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

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/

有关php - 瑞士排名系统Mysql查询问题的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

随机推荐