我正在使用循环赛安排比赛。我希望每支球队玩“ 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;
                    }
                }

最佳答案

如果将if ($conn->query($sql) === TRUE)用于select语句,则它不是true,请参见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中设置了完整的时间表,因此可以使用它来检查现有的匹配项。

您可以尝试其他策略:

对于球队数量不均,天数均等的循环赛,将来恰好有一天,已经有再见的团队子集将与已经有再见的团队对战,而所有团队还没有再见的球员将在那天再见,或者与还没有再见的球队比赛。

您要做的就是继续生成循环表,直到找到这一天并使用该天的匹配项为止。

09-25 18:57