Jump to content

Средняя арифметическая по столбцу- как? (php+sql)


dotez
 Share

Recommended Posts

Приветсвую всех.

Собственно ситуация такая, имеется форма котору заполняет пользователь жмет кнопку и ему вводится табличка на экран, так вот мне нужно чтобы по полученным результатам брался столбец "Цена", рассчитывалась его средняя арифметическая и вставлялась в текстовое окошко (на скрине пнятно в какое).

Подскажите как правильно это расписать и куда лучше вставить? (привожу концову своего скрипта).

//////////////////////////////////
// Поиск данных в базе
$find="";
if(sizeof($_POST)!=0){ // есть submit начинаем поиск


$table_from=array("flat"=>"Квартиры в аренду","room"=>"Комнаты в аренду","house"=>"Коттеджи в аренду");
$table_sql =array(
"Area" =>array("Moscow"=>"[Город] in ('Москва','Мск')",
"NearMoscow"=>"[Город] not in ('Москва','Мск')"),
"Raion" =>array("sql" =>"[Район]='%value%'"),
"City" =>array("sql" =>"[Город]='%value%'")
);
//echo $table_sql["Rooms"]["sql"];


/*
$iif=array("1=1");
if(intval($param["fmode"])==1){
foreach($param as $key=>$value){
if(isset($_POST[$key])){
$param[$key]=$_POST[$key];
if(isset($table_sql[$key])){
$q="";
if(isset($table_sql[$key]["sql" ])) $q.=str_replace("%value%", $value, $table_sql[$key]["sql"]);
if(isset($table_sql[$key][$value])) $q.=$table_sql[$key][$value];
$iif[]=$q;
}
}
}
}
*/
$Rooms = $table_sql["Rooms"]["sql"];


//Вычисляем количество комнат//
if($param["RealtyType"] == "flat")
{
$roomss = $param["Rooms"];
if($roomss >0) $s.=" and ([Кол-во комнат] = ".$roomss.")";
///////////////////
}




/// echo $s.'<br>';

$sql ="select * \n";
//$sql.= "from [".$table_from[$param["RealtyType"]]."]\n";
$sql.= "from [".$table."]\n";
$sql.= "where ".$s."\n";

/// echo $sql;

include("dbclass.php");

$reccount=0;
$mdb="C:\FTP\Root\baza.mdb";
$dbConnect=new dbConnection(dbADO,"",$mdb,"","");
if($dbConnect->connect){
$qry=new dbQuery($dbConnect);
$qry->Open($sql);
while($qry->Next()){
$row=$qry->GetAllFields();

if($reccount==0){
$find.="<table border=1 cellpadding=4 cellspacing=1>\n";
$find.="<tr>\n";
foreach($row as $i=>$v) $find.="<td><b>".$i."</b></td>\n";
$find.="</tr>\n";
}
$find.="<tr>\n";
foreach($row as $i=>$v) $find.="<td>".($v==""?" ":$v)."</td>\n";
$find.="</tr>\n";
$reccount++;;
}
}
$qry->Connection->Close();

if($reccount==0) $find.="<h1>Нет данных по запросу</h1>";
else $find.="</table>";
}
foreach($param as $key=>$value) $html=str_replace("%result%", $find, $html);

// Вывод итогового html текста
print $html;
php?>

138bd6b61e48.jpg

Edited by Veseloff
Код надо помещать в специальный тег
Link to comment
Share on other sites

1. Кошмар. Ну и код. Сам чёрт ногу сломит. Ничего не понятно.

2. Если надо сделать это запросом, то сделайте SUM(`fieldname`)/COUNT(`fieldname`)

3. А ещё это можно сделать прямо в PHP.

4. А ещё это можно сделать при помощи яваскрипта, не напрягая сервер.

Link to comment
Share on other sites

  • 4 weeks later...

сабж старый, но апнуть считаю обоснованным, потому как для этого есть специальная ф-ция, о которой не все догадываются

кстати, COUNT(*) в качестве знаменателя, то же не правильно, так как звёздочка вернёт все записи, значения `price` столбцов которые могут быть и null, тогда уже использовать `any`... но лучше всего, разумеется соблюдать "семантику", и юзать avg()

Link to comment
Share on other sites

сабж старый, но апнуть считаю обоснованным, потому как для этого есть специальная ф-ция, о которой не все догадываются

кстати, COUNT(*) в качестве знаменателя, то же не правильно, так как звёздочка вернёт все записи, значения `price` столбцов которые могут быть и null, тогда уже использовать `any`... но лучше всего, разумеется соблюдать "семантику", и юзать avg()

Ок, не знал просто о существовании и предполагал, что price всегда задан. Нужно еще раз пройтись по функциям MySQL.

Link to comment
Share on other sites

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy