获取按日期范围列的总和

时间:2014-11-25 03:15:20

标签: php html mysql

我有一小段代码可以获得列的总和

<?php

 class ManageServices{

 function getTotalSumByDateRange()
 {
    $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services ");      

    $rowcount = $query->rowCount();

    $result = $query->fetchAll();
    return $result; 
}
}

?>

// search.php中

<?php
 include_once('../../classes/class.ManageServices.php');
 $init = new ManageServices();  
 $sum_of_date_range = $init->getTotalSumByDateRange();    
 ?>

//搜索1

<?php

if(isset($_POST['submit']))
{ 
include_once('../../classes/class.ManageServices.php');
$init = new ManageServices();  
$date_from =$_POST['to_date'];
$date_to =$_POST['from_date'];

if(empty($_POST['to_date']) && empty($_POST['from_date']))
{
    $error = "No search query";
}
elseif(empty($_POST['to_date']) && !empty($_POST['from_date']))
{
     $error ="Please specify your start date search";
}
elseif(!empty($_POST['to_date']) && empty($_POST['from_date']))
{
     $error ="Please specify your end date search";
}
else
{
    $total_by_date_range = 0;
    $total_by_date_range = $init->getSumByDateRange($date_from, $date_to);
}
}

 ?>

// HTML

<?php
include_once('../../libs/search/search_sales_by_date.php');
include_once('../../libs/search1/total_sales.php');
?>

<!Doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>search by dates</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(function() {
$( ".datepicker" ).datepicker();
});
</script>

</head>
<body>
<div>
<?php
if(isset($error))
{
  echo $error;
}
?>
</div>
<h3>Search Sales</h3>
<p>From</p>
<form method="POST" action="search_sales_by_dates.php">
<p>Date: <input type="text" class="datepicker" name="from_date" id="field1"></p>
<p>To</p>
<p>Date: <input type="text" class="datepicker" name="to_date" id="field2"></p><br />
<input type="submit" value="search" name="submit" id="submitdata">
</form>
<div id ="fillmein1">
<?php foreach($sum_of_date_range as $sum): ?>
  <td>Total Sales<span class="glyphicon glyphicon-usd" aria-hidden="true"></span><?php echo     number_format($sum['total_sum'],2); ?></td>  
 <?php endforeach; ?>
 </div>
 <input type="hidden" value ="$total_by_date_range['sum_of_date_range'] ">//this is the problem
 </body>
 </html>

在我的表中我有列'id','amount',date_of_service'。上面的查询将计算所有'amount'值并显示在html中,但是,我想添加另一个查询,只会得到“数量”列的总和基于从html表单输入的日期范围。对此有何想法? 更新..我想我差不多了,在我更新了search1.php,search.php和html之后我现在的问题是我想以相同的形式显示$ total_by_date_range。但是当我提交表单时,它显示没有错误但不会显示$ total_by_date_range.anyway,$ sum_of_date范围会在同一页面中显示结果

3 个答案:

答案 0 :(得分:1)

首先,您需要添加另一个功能:

class ManageServices {
  function getTotalSumByDateRange() {
     $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services ");      
     $rowcount = $query->rowCount();
     $result = $query->fetchAll();
     return $result; 
  }
  function getSumByDateRange($date_from, $date_to) {
     $query = $this->link->query("SELECT SUM(amount) as sum_of_date_range FROM services where
     date_of_service between '".$date_from."' and '".$date_to."'");      
     $rowcount = $query->rowCount();
     $result = $query->fetch();
     return $result; 
  }
}

的search.php

<?php
 include_once('../../classes/class.ManageServices.php');
 $init = new ManageServices();  
 $sum_of_date_range = $init->getTotalSumByDateRange();
 $total_by_date_range = $init->getSumByDateRange($_POST['from_date'],$_POST['to_date']); 
?>

HTML

<?php
include_once('../../libs/search/search_sales_by_date.php');
?>

<div>
<?php foreach($sum_of_date_range as $sum):?> 
    <td><span class="glyphicon glyphicon-usd" aria-hidden="true"></span><?php echo    number_format($sum['sum_of_date_range'],2); ?></td>  
<?php endforeach;?>
<?php
  echo "Total by date range: ".$total_by_date_range;
?>
</div>

你可以尝试这样的事情。

答案 1 :(得分:0)

首先,如果未指定日期和结束日期,则显示所有总和。但如果存在,则过滤查询以在日期范围内显示总和。

这是我的解决方案。

function getTotalSumByDateRange($fromDate = "", $toDate = "")
{
    $sql = "SELECT SUM(amount) as sum_of_date_range FROM services ";      

    if (!empty($fromDate) && !empty($toDate) {
       $sql .= "WHERE date_of_service BETWEEN '". $fromDate . "' AND '" . $toDate . "'";
    }

    $query = $this->link->query($sql);

    $rowcount = $query->rowCount();

    $result = $query->fetchAll();
    return $result; 
}

答案 2 :(得分:0)

现在它正在工作。我重写了我的search.php

<?php
if(isset($_REQUEST['submit']))
{
include_once('../../classes/class.ManageServices.php');
$init = new ManageServices();  
$date_to =$_REQUEST['to_date'];
$date_from =$_REQUEST['from_date'];

if(empty($date_from) && empty($date_to))
{
    $error = "No search query";

}
elseif(empty($date_from) && !empty($date_to))
{
    $error = "Specify your end date search";
}
elseif(!empty($date_from) && empty($date_to))
{
    $error ="Specify your start date search";
}
else
{
    if($date_from < $date_to)
    {
    $total_by_date_range = $init->getSumByDateRange($date_from, $date_to);
    foreach ($total_by_date_range as $key) 
    {
    $success ="Your Total amount of sales from ". $date_from . ' ' . "To" . ' ' .$date_to . ' '   ."is". ' ' ."P" .number_format($key['sum_of_date_range'],2);
    }
    }
    else
    {
        $error = "You bitch, Start date should not greater than the end date on your search  query";
    }
 }
}
else
{
$error = "Because you are an idiot, the script contains some bugs that is why it can't run on the   browser!";
}

?>

我也更改了Jquery datepicker的日期格式,类似于mysql使用的格式,我发现在html($ _ GET方法)中使用不同的日期格式,mysql使用的格式将在查询中产生null。 / p>