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

  • Обсуждения

    • Актуальные контакты: Telegram: @Nikker_web E-Mail:   tarasevich.email@gmail.com Портфолио https://www.behance.net/d4d4186e Разрабатываю дизайн групп в соц сетях, сайтов, приложений, другой дизайн под заказ    
    • Актуальные контакты: Telegram: @Nikker_web E-Mail:   tarasevich.email@gmail.com   Разрабатываю дизайн групп в соц сетях, сайтов, приложений, другой дизайн под заказ   Портфолио https://www.behance.net/d4d4186e
    • Доброго всем времени суток. Прошу помощи. Научите принципу изменения футера. Движок Xenforo. Версия 2.2.10. Стиль дефолтный. Что именно нужно в итоге на фото примере. Мой шаблон app.footer less имеет следующее значение.  .p-footer { .xf-publicFooter(); a { .xf-publicFooterLink(); } } .p-footer-inner { .m-pageWidth(); .m-pageInset(); padding-top: @xf-paddingMedium; padding-bottom: @xf-paddingLarge; } .p-footer-row { .m-clearFix(); margin-bottom: -@xf-paddingLarge; } .p-footer-row-main { float: left; margin-bottom: @xf-paddingLarge; } .p-footer-row-opposite { float: right; margin-bottom: @xf-paddingLarge; } .p-footer-linkList { .m-listPlain(); .m-clearFix(); > li { float: left; margin-right: .5em; &:last-child { margin-right: 0; } a { padding: 2px 4px; border-radius: @xf-borderRadiusSmall; &:hover { text-decoration: none; background-color: fade(@xf-publicFooterLink--color, 10%); } } } } .p-footer-rssLink { > span { position: relative; top: -1px; display: inline-block; width: 1.44em; height: 1.44em; line-height: 1.44em; text-align: center; font-size: .8em; background-color: #4682B4; border-radius: 2px; } .fa-rss { color: white; } } .p-footer-copyright { margin-top: @xf-elementSpacer; text-align: center; font-size: @xf-fontSizeSmallest; } .p-footer-debug { margin-top: @xf-paddingLarge; text-align: right; font-size: @xf-fontSizeSmallest; .pairs > dt { color: inherit; } } @media (max-width: @xf-responsiveMedium) { .p-footer-row-main, .p-footer-row-opposite { float: none; } .p-footer-copyright { text-align: left; padding: 0 4px; // aligns with other links } }  
    • Нужны сайты с примерами верстки, типа https://css-tricks.com/. Типовые приемы и нестандартные на все случаи жизни. Накидайте ссылок.
×
×
  • 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