2

我目前有从数据库中提取数据的代码,然后对其中的一部分进行一些数学运算,然后将其打印到表中。但是,我想将打印的数字从大到小排列。我熟悉查询中的排序,但是查询不知道最终结果是什么。重新排列这些数据的最有效方法是什么。

<?php
    $hourAmount = $mlYeild * (3600 / $cycleTime);
    $oreVolumePriceQuery = "SELECT od.oreID, od.inGameID, od.size, ir.officialCorpRate FROM oreData od JOIN itemRates ir ON od.inGameID = ir.typeID order by od.oreID asc";
    $oreVolumePriceResult = mysql_query($oreVolumePriceQuery);
$hourYeild = $mlYeild * (3600 / $cycleTime);
?>
<TABLE>
    <TR>
        <TD><h1>Ore</h1></TD>
        <TD><h1>Hourly Yeild</h1></TD>
        <TD><h1>Hourly Sale</h1></TD>
    </TR>
    <?php
        $ores = array();
        While($row = mysql_fetch_assoc($oreVolumePriceResult)){
            $inGameID = $row['inGameID'];
            $volume = $row['size'];
            $rate = $row['officialCorpRate'];
            $name = $row['name'];
            $hourlyYeild = $hourAmount/$volume;
            $hourlyIncome = $hourlyYeild * $rate;

            echo "<TR>";
            echo "<TD>".$name."</TD>";
            echo "<TD>".$hourlyYeild."</TD>";
            echo "<TD>".$hourlyIncome."</TD>";
            echo "</TR>";
        }
    ?>
</TABLE>

简而言之,从进来的数据来看,我希望它通过$hourlyIncome desc

4

2 回答 2

2
  1. 首先将您的计算存储回$row(看起来好像$hourAmount丢失了——我认为这是$rate,希望我做对了):

    $inGameID = $row['inGameID'];
    $volume = $row['size'];
    $rate = $row['officialCorpRate'];
    $name = $row['name'];
    $hourlyYield = $row['hourlyYield'] = $rate /$volume;
    $hourlyIncome = $row['hourlyIncome '] = $hourlyYield * $rate;

  2. 将 附加$row$rows数组:$rows[] = $row;

  3. 当您拥有所有 时$rows,使用自定义比较函数对$rows数组进行排序。

    用户自定义比较:

    function cmp($a, $b)  
    {  
        if ($a['hourlyIncome'] == $b['hourlyIncome']) {  
            return 0;  
        }  
        return ($a['hourlyIncome'] < $b['hourlyIncome']) ? 1 : -1;  
    }
    
  4. 排序$rows方式usort($rows, $comp);

  5. 做一个标准循环$rows显示。

注意:在我看来,所有这些计算都可以在 SQL 端完成。

于 2013-01-11T00:10:07.203 回答
0

好吧,我不知道这是否是最有效的方法,但您可以将计算出的数据存储在数组中,然后对其进行排序。

于 2013-01-11T00:11:06.340 回答