我正在开发一个网页,该网页应该根据当前年份对给定列中的值进行平均。我得到了以下代码:
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT AVG(ElecUsage), DateAdded FROM elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
据我所知,应该从ElecUsage
列中的所有值中选择平均值。然而,我想知道如何根据当前年份从列中选择所有平均值。我知道要获得当前年份,我可以按照以下行做一些事情:<?php echo date("Y"); ?>
,这将与2016年相呼应。
我的DateAdded列存储为日期类型。所以今天是2016-04-19。有没有办法从列中提取2016,并将其应用于select语句,然后在我的HTML页面上的文本框中显示平均值?
感谢
您基本上自己回答了这个问题:
$year = date("Y");
$year = "$year%";
$stmt = $this->dbconn->prepare("SELECT AVG(ElecUsage), DateAdded FROM
elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "'
AND DateAdded LIKE '$year'");
这将提取2016年及以后的所有账号,我认为这就是你想要的?
这是关于您的查询。您必须从表中选择平均值,其中年份(日期)="current_year"
所以你的代码可能是这样的:
public function getElecReadings(){
try {
$current_year = date('Y');
$stmt = $this->dbconn->prepare("SELECT AVG(ElecUsage),
DateAdded FROM elec_readings WHERE year(DateAdded) = '$current_year' and AccountNumber = '" .$_SESSION['user_session'] . "'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
您还可以使用另一个查询来提取每年的平均值:
SELECT AVG(ElecUsage), year(DateAdded) FROM elec_readings GROUP BY YEAR(DateAdded)
我会这样做:
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT AVG(ElecUsage), DateAdded FROM elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "' AND CurrentYear LIKE '%2016'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
这对我很有效。就像你之前说的那样,用PHP计算年份,然后输出那个变量。
您还可以使用CURDATE()
使用mysql获取当前年份。只需将此条件添加到您的选择语句中即可
AND YEAR(DateAdded) = YEAR(CURDATE())