我正在尝试计算有序 MySQL结果集中团队的排名,我遇到的问题是检测第一个团队出现绑定值的关系.

例如,假设结果集如下:

team_id    pts
---------------
1          89
2          87
3          76
4          76
5          52

我使用以下PHP计算团队的排名:

$i = 0;
while($row = MysqL_fetch_assoc($r)) { //iterate thru ordered (desc) sql results
    ++$i;
    ($row['pts'] == $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 Points';
        $arr_ranks['tp']['actual'] = number_format($row['pts'],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['pts'],1) . ')';
    }
    $prev_val = $row['pts']; //set current score as prevIoUs score for next iteration of loop
}

上面的“平局”逻辑将捕获团队#4与团队#3并列,但反之则不然.

换句话说,对于团队#3,$rnk = 3,而对于团队#4,$rnk = T-3. (两者都应该是“T-3”.)

所以问题就变成了:如何在搜索结果的同时“向前看”,以查明当前得分是否是列表中下方得分的平局/重复,那么我可以将其作为一个平局与随后的欺骗一起对待?

谢谢.

编辑:如果我首先将结果存储在一个表中,我可以实现Ignacio的代码,例如下面的“wins”:

select
    s1.team_id,t.division_id,sum(s1.score>s2.score) tot_wins,(   select count(*)
                from wins
                where team_id <> s1.team_id
                and wins > (select wins
                            from wins
                            where team_id = s1.team_id)
            )+1 as rnk
from
    scoreboard s1
    left join teams t
        on s1.team_id = t.team_id
    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
order by tot_wins desc;

这给出了以下结果:

team_id    division_id   tot_wins  rnk
--------------------------------------
10         1             44        1
2          1             42        2
3          2             42        2
8          1             39        4
5          2             37        5
. . .

但是,我发现我已经到了这个结果集,这实际上并没有解决我的问题.

为避免混淆,我发布了the “follow-up” problem separately.

我喜欢伊格纳西奥与他答案的联系.但是如果您仍然想使用PHP,您可以通过score收集排名并为每个分数分配团队.它可能不是最有效的方法,但它会起作用.
$ranks = array();
while ($row = MysqL_fetch_assoc($result)) {
    $ranks[$row['pts']][] = $row['team_id'];
}

$rank是一个看起来像……的数组.

$ranks[89] = array(1);
$ranks[87] = array(2);
$ranks[76] = array(3,4);
$ranks[52] = array(5);

在$rank上使用foreach,并仔细检查积分将以哪种方式出现(升序或降序).您可以使用count()来查看是否存在平局.

在PHP中迭代MySQL结果时检测未来的重复值的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. ios – 数组的数组.仅存储副本

    我需要存储一个Int数组的数组,用于有序重复.例:>给定数组:mainArray=[7,7,3,2,1,5,5]现在我需要创建一个int数组的数组.例:这是我有的:解决方法您可以使用reduce方法.减少工作如何?reduce将封闭中的逻辑应用于空的2D数组的整数和数字的第一个elm.然后再次应用上一次迭代的结果和第二个整数数组…if是否检查在结果中添加的最后一个数组中的数字是否等于当前检查的整数.如果这样,那个整数被添加到该数组.否则,只会添加一个仅包含新整数的数组.测试

  3. Swift:Generators 与 Sequences 浅析

    前言Generators与Sequences构成了Swift式循环。Generators提到数组我们就会想到遍历,一般的遍历可能都是从头到尾进行的。这时候Generators就可以派上用场了。举个倒序索引的generator:好处是啥好处是啥,我的总结是把一个很抽象遍历模式使用Generators的方式剥离出来,当你对当前的迭代循环方式不爽的时候只需要修改一下当前的这个generator。SequencesGenerators在循环过程中每个元素提供的服务是一次性的。

  4. 再探Swift基础

    基础tuplesstringsnumericfor循环while循环if条件switchoptionalarraydictionaryset

  5. swift排序算法和数据结构

    vararrayNumber:[Int]=[2,4,216)">6,216)">7,216)">3,216)">8,216)">1]//冒泡排序funcmaopao->[Int]{forvari=0;i

  6. Swift - 流程控制

    switch分支语句switch语句由一个控制表达式和多个case标签组成。不存在隐式贯穿与C语言和Objective-C中的switch语句不同,在Swift中,当匹配的case分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个case分支。For循环Swift提供两种for循环形式以来按照指定的次数多次执行一系列语句:for-in循环对一个集合里面的每个元素执行一系列语句。Swift有四种控制转移语句:continue、break、fallthrough、return、throw

  7. Arrray 中的map和filter 函数的使用

    swift中的Array提供了两个很方便的函数map和filter使用map可以建立一个从A数组到B数组的一个映射,例如:我们给数组的每个元素后添加一个testvararray=["1","2","3"];printlnfuncfx->String{returnstr+"test"}我们还可以使用filter函数按条件过滤一些不符合条件的数组例如:vararray=[1,4,10];array=array.filterprintln//结果[4,10]另外一种写法:array.filter

  8. Swift 2.0学习笔记Day 17——Swift中数组集合

    数组中的集合元素是有序的,可以重复出现。varstudentList1:ArrayvarstudentList2:[String]声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化。示例代码如下:varstudentList1:Array=["张三","李四","王五","董六"]varstudentList2:[String]=["张三","董六"]letstudentList3:[String]=["张三","董六"]varstudentList4=[String](

  9. Swift高级开发语言基础

  10. Swift关于Array的探讨

    当我们想向Array添加不同数据类型的元素时,可以这样做:这样我们便可以向Array添加任何数据类型的元素了,但是如果我们希望Array中只能添加特定几种类型的元素怎么办呢?这里提供一种思路:

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部