我是php和sql的新手。今天,我给自己的任务是从sql数据库中获取整数值,然后做一些基本的计算。是否有其他地方可以减少代码,同时仍然完成任务,或者我已经下降到最基本的水平?在这个过程中,我是否执行过度了?
我的目标是;
- 从列中获取db值
- 从本列中获取平均值
- 然后计算排除最高值和最低值的新平均值。
下面是我最好的尝试;
$con = new MySQLi('localhost', 'user', 'pass', 'db_test') ;
$count = $con->query('SELECT COUNT(SP$) FROM `math`');
$grp = $con->query('SELECT GROUP_CONCAT(SP$) FROM `math`');
$min = $con->query('SELECT MIN(SP$) FROM `math`');
$max = $con->query('SELECT MAX(SP$) FROM `math`');
$sum = $con->query('SELECT SUM(SP$) FROM `math`');
$avg = $con->query('SELECT AVG(SP$) FROM `math`');
$count = $count->fetch_assoc();
$grp = $grp->fetch_assoc();
$min = $min->fetch_assoc();
$max = $max->fetch_assoc();
$sum = $sum->fetch_assoc();
$avg = $avg->fetch_assoc();
$count = $count['COUNT(SP$)'];
$grp = $grp['GROUP_CONCAT(SP$)'];
$min = $min['MIN(SP$)'];
$max = $max['MAX(SP$)'];
$sum = $sum['SUM(SP$)'];
$avg = $avg['AVG(SP$)'];
显示和计算如下;
echo "Sample Size: " . $count ."</br />";
echo "Display Values:" . $grp ."</br />";
echo "Sum of Values: " . $sum ."</br />";
echo "Average: " . $avg ."</br /></br />";
echo "Now find the new average, by excluding the highest and lowest value:";
echo "Lowest Value: " . $min ."</br />";
echo "Highest Value: " . $max ."</br />";
echo "New Sum: " . ($sum - $max - $min) . "</br />";
echo "New Average : " . (($sum - $max - $min) / ($count-2));
你可以试着这样做:
$con = new MySQLi('localhost', 'user', 'pass', 'db_test');
$operations = ["count"=>'COUNT(SP$)',
"grp"=>'GROUP_CONCAT(SP$)',
"min"=>'MIN(SP$)',
"max"=>'MAX(SP$)'...];
foreach($operations as $name=>$value){
$name = ${$name};
$name = $con->query('SELECT '.$value.' FROM `math`');
$name = $name->fetch_assoc();
$name = $name[$value];
}
所做的是将所有操作放在一个关联数组(http://php.net/manual/en/language.types.array.php)中,并用foreach语句循环数组。
现在,变量名是使用PHP Variables - Concatenate变量名组合的。注意,这是不推荐的,但它存在并且有效。
代码没有测试,因为我的机器上没有安装PHP,但它应该是有效的