Php "全胜";; $arr_排名['tp']['actual']=number_格式($prev_wins,1); $arr_ranks['tp']['league_rank']=$prev_rnk; $arr_ranks['tp']['div_rank']=$div_rnk; 如果($row['wins']=$prev_wins) { $arr_秩['tp']['tie']=true; } 其他的 { $arr_秩['tp']['tie']=false; } 打破 } 否则,如果($i==1){//当前团队是类别领导(秩=1),并且不是有问题的团队,则将当前团队设置为领导 $arr_排名['tp']['leader']=“('.number_格式($row['wins'])”)”; } $prev_wins=$row['wins']; $prev_team_id=$row['team_id'; $prev_rnk=$rnk; } 如果($prev_team_id==$team_id){ $arr_排名['tp']['cat']='Total Wins'; $arr_排名['tp']['actual']=number_格式($prev_wins,1); $arr_ranks['tp']['league_rank']=$prev_rnk; $arr_ranks['tp']['div_rank']=$div_rnk; 如果($row['wins']=$prev_wins) { $arr_秩['tp']['tie']=true; } 其他的 { $arr_秩['tp']['tie']=false; } }

Php "全胜";; $arr_排名['tp']['actual']=number_格式($prev_wins,1); $arr_ranks['tp']['league_rank']=$prev_rnk; $arr_ranks['tp']['div_rank']=$div_rnk; 如果($row['wins']=$prev_wins) { $arr_秩['tp']['tie']=true; } 其他的 { $arr_秩['tp']['tie']=false; } 打破 } 否则,如果($i==1){//当前团队是类别领导(秩=1),并且不是有问题的团队,则将当前团队设置为领导 $arr_排名['tp']['leader']=“('.number_格式($row['wins'])”)”; } $prev_wins=$row['wins']; $prev_team_id=$row['team_id'; $prev_rnk=$rnk; } 如果($prev_team_id==$team_id){ $arr_排名['tp']['cat']='Total Wins'; $arr_排名['tp']['actual']=number_格式($prev_wins,1); $arr_ranks['tp']['league_rank']=$prev_rnk; $arr_ranks['tp']['div_rank']=$div_rnk; 如果($row['wins']=$prev_wins) { $arr_秩['tp']['tie']=true; } 其他的 { $arr_秩['tp']['tie']=false; } },php,mysql,ranking,Php,Mysql,Ranking,我想我通过SQL找到了一个解决方案!可能不太优雅(我可以稍后再清理),但接下来 查询: SELECT a.team_id, a.wins, count(*) instances FROM (SELECT s1.team_id, sum(s1.score>s2.score) wins FROM scoreboard s1 LEFT JOIN scoreboard s2 ON s1.year=s2.year

我想我通过SQL找到了一个解决方案!可能不太优雅(我可以稍后再清理),但接下来

查询:

SELECT a.team_id, a.wins, count(*) instances
FROM
    (SELECT
        s1.team_id,
        sum(s1.score>s2.score) wins
    FROM scoreboard s1
        LEFT JOIN scoreboard s2
            ON s1.year=s2.year
            AND s1.week=s2.week
            AND s1.playoffs=s2.playoffs
            AND s1.game_id=s2.game_id
            AND s1.location<>s2.location
    GROUP BY s1.team_id) AS a
    LEFT JOIN
        (SELECT
            sum(s1.score>s2.score) wins
        FROM scoreboard s1
            LEFT JOIN scoreboard s2
                ON s1.year=s2.year
                AND s1.week=s2.week
                AND s1.playoffs=s2.playoffs
                AND s1.game_id=s2.game_id
                AND s1.location<>s2.location
        GROUP BY s1.team_id) AS b
            ON a.wins = b.wins
GROUP BY a.team_id, b.wins
ORDER BY a.wins DESC;
然后,在PHP中,我将能够通过检查when
$row['instances']>1
来检测所有关系


感谢大家与我一起度过了这个不自然的麻烦问题!

我想我通过SQL找到了一个解决方案!可能不是很优雅(我可以稍后再清理),但接下来

查询:

SELECT a.team_id, a.wins, count(*) instances
FROM
    (SELECT
        s1.team_id,
        sum(s1.score>s2.score) wins
    FROM scoreboard s1
        LEFT JOIN scoreboard s2
            ON s1.year=s2.year
            AND s1.week=s2.week
            AND s1.playoffs=s2.playoffs
            AND s1.game_id=s2.game_id
            AND s1.location<>s2.location
    GROUP BY s1.team_id) AS a
    LEFT JOIN
        (SELECT
            sum(s1.score>s2.score) wins
        FROM scoreboard s1
            LEFT JOIN scoreboard s2
                ON s1.year=s2.year
                AND s1.week=s2.week
                AND s1.playoffs=s2.playoffs
                AND s1.game_id=s2.game_id
                AND s1.location<>s2.location
        GROUP BY s1.team_id) AS b
            ON a.wins = b.wins
GROUP BY a.team_id, b.wins
ORDER BY a.wins DESC;
然后,在PHP中,我将能够通过检查when
$row['instances']>1
来检测所有关系



感谢大家帮助我解决了这个异常麻烦的问题!

为什么不在循环中一次性读取整个点列表,然后使用数组搜索检查下一个循环中的重复项?为什么不在循环中一次性读取整个点列表,然后使用数组搜索检查下一个循环中的重复项?Thanks,但这只有在结果存储在表中时才有效,而我的不是。我在上面的编辑中添加了我的查询,以便您可以看到我实际上必须计算值,然后检查这些值是否重复。您的结果不在表中?也许您应该删除巨大的标题,该标题为:这是获取数据的SQL查询e结果集:@BrianWarshaw我正在检查重复的值(“wins”)不在表中。正如您所看到的,我必须通过比较分数来计算它。谢谢,但这只有在结果存储在表中时才有效,而我的不是。我在上面的编辑中添加了我的查询,以便您可以看到,我实际上必须计算值,然后检查这些值是否重复。您的结果不在表中吗?也许您应该删除一个巨大的标题,它是:下面是获取结果集的SQL查询:@BrianWarshaw我正在检查重复的值(“wins”)不在表中。正如你所看到的,我必须通过比较分数来计算它。谢谢,但我相信我在上面对@Matmarbon的评论也适用于这里……谢谢,但我相信我在上面对@Matmarbon的评论也适用于这里……请看我在上面的评论。我必须通过查询来计算值;它们不是预先填充的在一个随时可用的表中。这很好——这个伪代码告诉您当您有行信息时该怎么做。我假设您已经了解PHP中的循环,所以它应该很容易实现。我认为[Airzooka提供的解决方案](stackoverflow.com/questions/10855462/在php中迭代mysql结果时检测未来的重复值)将比两次循环结果更有效。我很好奇是否有比这更有效的方法,无论是直接通过SQL还是非直接通过SQL。他的效率稍高一些,是的,但只有在有关系的情况下——如果没有关系,你仍然有效地循环结果两次。那么你会说没有关系吗那么,在SQL级别提前检测关联的有效方法是什么呢?请参见我上面的评论。我必须通过查询来计算值;它们没有预先填充到一个现成的表中。这很好——这个伪代码告诉您当您有行信息时该怎么做。我假设您已经理解PHP中的循环,所以应该是这样的实现起来很简单。我认为[Airzooka提供的解决方案](stackoverflow.com/questions/10855462/detect future duplicate value,同时在php中迭代mysql结果)将比两次循环结果更有效。我很好奇是否有比这更有效的方法,无论是直接通过SQL还是非直接通过SQL。他的效率稍高一些,是的,但只有在有关系的情况下——如果没有关系,你仍然有效地循环结果两次。那么你会说没有关系吗n在SQL级别提前检测联系的有效方法,那么?实际上,输出仅针对单个团队每页。输出是类别、实际值、排名(如果所讨论的团队与另一个团队联系在一起,则希望包括“T-”),和联赛领头羊。实际上,每页的输出仅针对单个球队。输出是类别、实际值、排名(如果所讨论的球队与其他球队并列,希望包括“T-”)和联赛领头羊。
$i = 0;
while($row = mysql_fetch_assoc($r)) { //iterate thru ordered (desc) SQL results
    ++$i;
    ($row['wins'] == $prev_val)
        ? $rnk = 'T-' . $rnk    //same as previous score, indicate tie
        : $rnk = $i;            //not same as previous score
    $rnk = str_replace('T-T-','T-',$rnk); //eliminate duplicative tie indicator
    if ($row['team_id'] == $team_id) { //current team in resultset matches team in question, set team's rank
        $arr_ranks['tp']['cat'] = 'Total Wins';
        $arr_ranks['tp']['actual'] = number_format($row['wins'],1);
        $arr_ranks['tp']['league_rank'] = $rnk;
        $arr_ranks['tp']['div_rank'] = $div_rnk;
    }
    else if ($i == 1) { //current team is category leader (rank=1) and is not team in question, set current team as leader
        $arr_ranks['tp']['leader'] = "<a href='index.php?view=franchise&team_id=" . $row['team_id'] . "'>" . get_team_name($row['team_id']) . '</a> (' . number_format($row['wins']) . ')';
    }
    $prev_val = $row['wins']; //set current score as previous score for next iteration of loop
}
SELECT t1.`id`,t1.`pts`,t1.`team_id`,
IF(t1.`pts` = t2.`pts` AND t1.`id` != t2.`id` ,1,0) AS `tied`
FROM `teams` t1
LEFT JOIN `teams` t2 on t2.`pts` = t1.`pts` AND t2.`id` != t1.`id`
GROUP bY t1.`id`
loop through rows as row1
    loop through rows as row2
        if row1 ain't row2 and row1.points == row2.points, append T    
$i = 0;
while($row = mysql_fetch_assoc($r)) { //iterate thru ordered (desc) SQL results 
    ++$i; 
    ($row['wins'] == $prev_wins) 
        ? $rnk = $prev_rnk    //same as previous score, indicate tie 
        : $rnk = $i;            //not same as previous score 
    $rnk = str_replace('T-T-','T-',$rnk); //eliminate duplicative tie indicator 

    if ($prev_team_id == $team_id) {
        $arr_ranks['tp']['cat'] = 'Total Wins'; 
        $arr_ranks['tp']['actual'] = number_format($prev_wins,1); 
        $arr_ranks['tp']['league_rank'] = $prev_rnk; 
        $arr_ranks['tp']['div_rank'] = $div_rnk;

        if ($row['wins'] == $prev_wins)
        {
            $arr_ranks['tp']['tie'] = true;
        }
        else
        {
            $arr_ranks['tp']['tie'] = false;
        }

    break;
    }
    else if ($i == 1) { //current team is category leader (rank=1) and is not team in question, set current team as leader 
        $arr_ranks['tp']['leader'] = "<a href='index.php?view=franchise&team_id=" . $row['team_id'] . "'>" . get_team_name($row['team_id']) . '</a> (' . number_format($row['wins']) . ')'; 
    }

    $prev_wins = $row['wins'];
    $prev_team_id = $row['team_id'];
    $prev_rnk = $rnk;
}

if ($prev_team_id == $team_id) {
    $arr_ranks['tp']['cat'] = 'Total Wins'; 
    $arr_ranks['tp']['actual'] = number_format($prev_wins,1); 
    $arr_ranks['tp']['league_rank'] = $prev_rnk; 
    $arr_ranks['tp']['div_rank'] = $div_rnk;

    if ($row['wins'] == $prev_wins)
    {
        $arr_ranks['tp']['tie'] = true;
    }
    else
    {
        $arr_ranks['tp']['tie'] = false;
    }

}
SELECT a.team_id, a.wins, count(*) instances
FROM
    (SELECT
        s1.team_id,
        sum(s1.score>s2.score) wins
    FROM scoreboard s1
        LEFT JOIN scoreboard s2
            ON s1.year=s2.year
            AND s1.week=s2.week
            AND s1.playoffs=s2.playoffs
            AND s1.game_id=s2.game_id
            AND s1.location<>s2.location
    GROUP BY s1.team_id) AS a
    LEFT JOIN
        (SELECT
            sum(s1.score>s2.score) wins
        FROM scoreboard s1
            LEFT JOIN scoreboard s2
                ON s1.year=s2.year
                AND s1.week=s2.week
                AND s1.playoffs=s2.playoffs
                AND s1.game_id=s2.game_id
                AND s1.location<>s2.location
        GROUP BY s1.team_id) AS b
            ON a.wins = b.wins
GROUP BY a.team_id, b.wins
ORDER BY a.wins DESC;
=================================
|team_id   | wins    |instances |
=================================
|10        | 44      |1         |
|2         | 42      |3         | //tie
|9         | 42      |3         | //tie
|5         | 42      |3         | //tie
|3         | 41      |1         |
|11        | 40      |1         |
|...       |         |          |
=================================