如何在列中添加/总计总金额并使用php根据日期进行搜索?

时间:2015-11-08 23:01:31

标签: php mysql search sum

我将根据( id_patient )在一列中添加总金额( rialamount ),这对每个用户都是唯一的,并在页面上显示为总金额,然后管理员将能够根据( opening_date )搜索日期,到日期,以查看日期持续时间的总金额。

这是我的示例mysql db:

id_patient opening_date rialamount
         1   2015-11-07   250000.00    
         1   2015-11-09    25000.00
         1   2015-11-09   795864.15
         1   2015-11-09 12598755.00

以下是我正在寻找的样本。

<label for="fromdate">From Date:</label>
<input size="4" id="fromdate" name="fromdate" value="" maxlength="4" type="text">
 - <input size="2" id="dmonth" name="dmonth" value="" maxlength="2" type="text">
 - <input size="2" id="dday" name="dday" value="" maxlength="2" type="text">

<label for="todate">To Date:</label>
<input size="4" id="todate" name="todate" value="" maxlength="4" type="text">
 - <input size="2" id="dmonth" name="dmonth" value="" maxlength="2" type="text">
 - <input size="2" id="dday" name="dday" value="" maxlength="2" type="text">
 <h3>Total Amount in Date Duration is: </h3>

我真的很感谢你的帮助。

提前致谢。

2 个答案:

答案 0 :(得分:2)

<强>模式

CREATE TABLE IF NOT EXISTS `amm` (
`id` int(11) NOT NULL,
  `id_patient` int(11) NOT NULL,
  `opening_date` varchar(255) NOT NULL,
  `rialamount` double NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

数据

INSERT INTO `amm` (`id`, `id_patient`, `opening_date`, `rialamount`) VALUES
(1, 1, '2015-11-07', 250000),
(2, 1, '2015-11-09', 25000),
(3, 1, '2015-11-09', 795864.15),
(4, 1, '2015-11-09', 12598755);

SQL QUERY

SELECT SUM(rialamount) as sum_result
FROM amm 
WHERE opening_date BETWEEN STR_TO_DATE('2015-11-07', '%Y-%c-%e') AND STR_TO_DATE('2015-11-09', '%Y-%c-%e')
GROUP BY id_patient;

<强> RESULT

13669619.15

PHP / HTML非常简单的实现

<form action="" method="POST">
    <h3>Total Amount is:</h3>
    <hr>
    <label for="fromdate">From Date:</label>
    <input size="4" id="fromdate" name="fromdate" value="" maxlength="4" type="text">
     - <input size="2" id="dmonth" name="dmonth" value="" maxlength="2" type="text">
     - <input size="2" id="dday" name="dday" value="" maxlength="2" type="text">

    <label for="todate">To Date:</label>
    <input size="4" id="todate" name="todate" value="" maxlength="4" type="text">
     - <input size="2" id="dmonth" name="tdmonth" value="" maxlength="2" type="text">
     - <input size="2" id="dday" name="tdday" value="" maxlength="2" type="text">
     <input type="submit" name="calculateFormSubmit" value="Get" />
     <h3>Total Amount in Date Duration is: </h3>
</form>

<?php

if($_SERVER["REQUEST_METHOD"] == "POST" && array_key_exists("calculateFormSubmit", $_POST)) {
    $connectionData = [
        "server" => "",
        "user" => "",
        "pass" => "",
        "database" => ""
    ];



    $db = null;

    try {
        $db = new PDO("mysql:host=" . $connectionData["server"] . ";dbname=" . $connectionData["database"], $connectionData["user"], $connectionData["pass"]);
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch(PDOException $e) {
        echo $e->getMessage();
    }

    $dateFrom = (int)$_POST["fromdate"] . "-" . (int)$_POST["dmonth"] . "-" . (int)$_POST["dday"];
    $dateTo = (int)$_POST["todate"] . "-" . (int)$_POST["tdmonth"] . "-" . (int)$_POST["tdday"];

    $stmt = $db->prepare("SELECT SUM(rialamount) as sum_result, id_patient
                          FROM amm 
                          WHERE opening_date BETWEEN STR_TO_DATE(:date_from, '%Y-%c-%e') AND STR_TO_DATE(:date_to, '%Y-%c-%e')
                          GROUP BY id_patient;");

    $stmt->bindValue(":date_from", $dateFrom);
    $stmt->bindValue(":date_to", $dateTo);

    $stmt->execute();

    $userData = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if($userData != false) {
        foreach ($userData as $current) {
            echo "<b>" . $current["id_patient"] . "</b> - " . $current["sum_result"] . "<br />";
        }
    }

    if($db !== null) {
        $db = null;
    }
}
?>

答案 1 :(得分:0)

这里有空气代码,但这里有:

Select id, sum(rialamount) from table where Id = $id and date between $start and $end group by id

您可以在php表单中传递开始和结束参数。