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)'];
}
?>
答案 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
函数转移到PDO
或empg_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
希望有所帮助!