使用PHP进行排序,但某些条目可以具有相同的值

时间:2012-05-08 21:57:28

标签: php

我正在研究马匹评级系统,我需要根据另一个(已填充)字段的值为每匹马分配值(所有这些都存储在MySQL数据库中)。

考虑以下简化示例: -

四匹马比赛,每匹马的赔率如下: -

马A - 2/1 马B - 3/1 马C - 3/1 马D - 5/1

由于马A的价格最低,我想给它一个值为1。

然而,马B和C的价格相同,所以我想给他们两个。

马D的价格是次高,所以我想给它3的值。

当我第一次开始这样做时,我认为这很容易,但它现在已经到了循环使我循环的阶段。任何建议都将不胜感激。

非常感谢提前。

鉴于我在Daan下面收到的回复,我还应该补充一点,我的问题因为我的表有几个子集(即它在任何一天包含多个种族而且需要是单独排名。

我的目前是: -

racedate |比赛时间|赛马场| horsename |预测| forecast_rate | ID

用于此目的的赛马总是一样的。比赛时间和赛马场共同确定了有争议的种族。

预测是给每匹马的价格(这已经在此阶段输入了),这需要对其进行共享排名才能存储在forecast_rate中。

id只是表中每个条目的唯一索引。

这就是我现在所拥有的(它不起作用......惊喜......)

    $testdude=mysql_query("SELECT DISTINCT racecourse,racetime FROM picking") or die(mysql_error());

while($rih=mysql_fetch_array($testdude)){
$testdude1=mysql_query("SELECT s1.forecast, s1.horsename, COUNT(DISTINCT s2.forecast) AS rank FROM picking s1 JOIN picking s2 ON (s1.forecast <= s2.forecast) GROUP BY s1.horsename;");
while($rih1=mysql_fetch_array($testdude1)){
mysql_query("UPDATE picking SET forecast_rate='$testdude1[rank]' where horsename='$testdude1[horsename]'") or die(mysql_error());
}
}

1 个答案:

答案 0 :(得分:0)

这称为共享排名,在MySQL中最容易实现。看看this tutorial,看看你是否可以让它发挥作用。如果没有,请提供有关您的桌子布局的更多详细信息,我将为您提供一个量身定制的示例:)