0

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

1 回答 1

0

if ($conn->query($sql) === TRUE)如果您将其用于select声明,则不正确,请参阅文档

失败时返回 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已经有完整的日程安排,您可以使用它来检查现有的匹配项。

您可以尝试不同的策略:

对于奇数队和偶数天的循环赛,在未来恰好有一天,已经轮空的球队的子集将与已经轮空的球队进行比赛,并且所有球队还没有再见的球队要么在那天再见,要么对阵还没有再见的球队。

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

于 2016-09-02T16:25:15.937 回答