Round Robin Scheduler填写“byes”

时间:2016-09-02 13:21:39

标签: php mysql loops round-robin

我正在使用Round Robin来安排比赛。我希望每个队都能打“n”场比赛,而且我有“x”队。如果“x”是偶数,那么一切都很好,但如果“x”是奇数,我必须添加另一个团队,“再见”才能让它发挥作用。

当我有11支球队各自参加4场比赛时,他们会在比赛中解决问题,以便让4支球队获得成功。这是低效率的,因为他们可以互相比赛,以便每支球队打4场比赛。

在安排所有比赛,包括一支球队是“再见”的比赛之后,我试图让所有队员都有一个“再见周”并让他们互相打一场比赛。我需要确保球队之前没有比赛。

由于我使用的是少数团队,我只是使用随机发生器尝试组合,直到一个工作。但是,我无法让它发挥作用。

这是我的代码,用于安排通过轮次互相比赛的球队。我想通过检查以确定他们之前是否玩过,如果有,请将列表随机化,以便我们可以尝试不同的组合。我不认为检查球队到目前为止是否参加比赛是有效的,因为即使他们有重叠,也不会改组球队。

while (true){
                        $needshuffled = "no";
                    for ($j=0; $j < $maxgames/2; $j++){
                        $k = $j*2;
                        $round[$maxgames][$j]["Home"]=$byeteams[$k];
                        $round[$maxgames][$j]["Away"]=$byeteams[$k+1];

                        $home = $round[$maxgames][$j]["Home"];
                        $away = $round[$maxgames][$j]["Away"];

                        $sql = "SELECT * FROM `temp` 
                            WHERE (Home = '$home' and Away = '$away') 
                               or (Home = '$away' and Away = '$home')";
                        if ($conn->query($sql) === TRUE) {
                            if ($result=mysqli_query($conn,$sql))
                            {
                                    // Return the number of rows in result set
                                    $rowcount=mysqli_num_rows($result);
                                    if ($rowcount > 0)
                                    {
                                        $needshuffled = "yes";
                                    }
                            }   

                        }
                    }

                    if ($needshuffled == "no"){
                        break;
                    }
                }

1 个答案:

答案 0 :(得分:0)

if ($conn->query($sql) === TRUE)如果您将其用于select语句,则不然,请参阅documentation

  

失败时返回FALSE。对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象。对于其他成功的查询,mysqli_query()将返回TRUE。

既然你要做两次,你可以完成删除这一行,然后使用

$sql = "SELECT * FROM `temp` 
        WHERE (Home = '$home' and Away = '$away') 
        or (Home = '$away' and Away = '$home')";
if ($result=mysqli_query($conn,$sql)) {
    ...

或者,由于您已在变量$round中拥有完整的计划,因此可以使用此计划检查现有匹配项。

你可以尝试不同的策略:

对于队伍数量不均匀且天数均匀的循环赛,将来恰好有一天,已经有过再见的球队的子集已经对阵已经有了再见的球队,并且所有没有再见的球队当天要么有一个再见,要么对一支没有再见的球队进行比赛。

您需要做的就是继续生成循环表,直到找到当天的比赛并使用当天的比赛。