Изменение порядка данных перед печатью


В настоящее время у меня есть код, который извлекает данные из БД, затем делает некоторую математику на ее части, а затем печатает ее в таблицу. Однако я хотел бы расположить числа, напечатанные от больших до самых маленьких. Я знаком с порядком в запросе, однако запрос не знает, каким будет конечный результат. Каков был бы наиболее эффективный способ переупорядочить эти данные?

<?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
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.

Ну, я не знаю, является ли это наиболее эффективным способом, но вы можете хранить вычисленные данные в массиве, а затем сортировать их.