如何使用表中的数据显示每列的最高值?

时间:2017-10-08 13:10:59

标签: php html mysql

My table looks like this. 这是我的代码,用于显示每个类别的平均值。但我想找到每列的最高价值。就像在C1.1中一样,我希望在该列中找到最高的平均值。

<div class="container" class="col-lg-5">
<table class="table table-striped table table-bordered" >
<tr><th>Campus</th>
<th>No. of Staff</th>
<th>C1.1</th>
<th>C1.2</th>
<th>C1.3</th>
<th>C1.4</th>
<th>C1.5</th>
<th>C1.6</th>
<th>C2.1</th>
<th>C2.2</th>
<th>C2.3</th>
<th>C3.1</th>
<th>C3.2</th>
<th>C3.3</th>
<th>C3.4</th>

    <tr>
    <td>MAIN 1 - CABEIHM</td>
    <td>
            <?php   
            $queryn ="SELECT COUNT(dept_code) FROM employment where                                     dept_code=3 and empg_code=1";
            $resultn = mysql_query($queryn) or die(mysql_error());
            while($row1 = mysql_fetch_array($resultn)){
            echo "".$row1['COUNT(dept_code)'];
             echo "<br />";
             }
         ?>
    </td>
    <td><!--1.1-->
    <?php

    $query1 = ("SELECT  ROUND(AVG(Compv11),2) , dept_code ,  camp_code
                                FROM performance 
                                INNER JOIN employment 
                                ON employment.emp_code=performance.emp_id AND employment.dept_code=performance.dept_id
                                WHERE empg_code=1  AND dept_id=3
                                ");
                $result1 = mysql_query($query1) or die(mysql_error());
            [enter image description here][1]

                // Print out result
                while($row = mysql_fetch_array($result1))
                {
                echo "".$row['ROUND(AVG(Compv11),2)'];
                }

        ?>

        

1 个答案:

答案 0 :(得分:2)

要从C1.1列中获取具有最高平均值的行,最好的选择是在PHP中计算它。

当前从数据库获取值时,您正在直接输出值。您需要将平均值存储在变量中,以便稍后获得最高值:

$averages = array();

$query1 = ("SELECT  ROUND(AVG(Compv11),2) , dept_code ,  camp_code
            FROM performance 
            INNER JOIN employment 
            ON employment.emp_code=performance.emp_id AND employment.dept_code=performance.dept_id
            WHERE empg_code=1  AND dept_id=3
");

$result1 = mysql_query($query1) or die(mysql_error());

// Print out result
while($row = mysql_fetch_array($result1))
{
    $averages[1] = $row['ROUND(AVG(Compv11),2)'];
    echo "".$row['ROUND(AVG(Compv11),2)'];
}

请注意,我已将结果添加到1的索引$averages,因为您的变量名为$query1$result1,我认为您的所有变量都是$query2您使用递增变量的其他行(即第二行的$result2$averages等)。以下内容效率不高,之后我会给你一个替代方案。

获得arsort($averages); 中的所有平均值后,您可以对数组进行排序:

reset()

这将以相反的顺序对数组进行排序(意味着第一个条目将是具有最高值的条目),同时保持索引与值的关联。现在我们key()数组是安全的,之后您可以使用current()函数获取索引,使用reset($averages); $highest_index = key($averages); $highest_value = current($averages); $highest_query = "query" . $highest_index; $highest_result = "result" . $highest_index; 函数获取值本身:

$$highest_query

现在您知道最高值来自$$highest_result,其结果位于mysql_data_seek($$highest_result, 0),以防您想要对该信息执行某些操作。例如,您可以使用mysql_fetch_array($$highest_result)重置它,然后您可以使用mysql_*再次获取其行。

虽然您应该考虑从旧的,不受支持的mysqli函数转移到PDOempg_code进行数据库通信。

现在我提到了另一种选择:

根据您想要使用最高价值做什么(您说要输出它和&#34;对其进行报告&#34;),您可能还想知道哪个dept_id和您在查询中过滤了dept_code,或者您正在选择camp_code$averages以及平均值。

因此,让我们的while($row = mysql_fetch_array($result1)) { $averages[] = array( 'avg' => $row['ROUND(AVG(Compv11),2)'], 'empg_code' => 1, 'dept_id' => 3, 'dept_code' => $row['dept_code'], 'camp_code' => $row['camp_code'] ); echo "".$row['ROUND(AVG(Compv11),2)']; } 数组填充的不仅仅是平均值:

usort

现在我们可以使用usort($averages, function($a, $b) { if ($a['avg'] == $b['avg']) { return 0; } // note: reverse check of the example, because we want to // sort in DESCENDING order // https://php.net/usort return ($a['avg'] > $b['avg']) ? -1 : 1; }); 使用自定义函数对数组进行排序:

$averages

现在,具有最高值的条目的数据将是$highest = $averages[0]; echo $highest['avg']; // highest average value echo $highest['empg_code']; // 1 echo $highest['dept_id']; // 3 echo $highest['dept_code']; // dept_code for the highest average value echo $highest['camp_code']; // camp_code for the highest average value 数组的第一个条目:

eapply

希望有所帮助!