2010-01-27 109 views
2

我有一个数据库管理页面的小问题,我使用它来更新MySQL数据库中的值和总计,以便为网站生成各种数据和数据。用MySQL/PHP按年份总和值

有点背景 - 有问题的数据库表持有慈善书摊的筹款总数,该表有三列 - id,date和amountraised。总结特定年份或当年筹得的总额并不是问题 - 我已经从去年2月筹款开始时获得一笔总额,而当年的筹款总额已经很好。我刚刚意识到,尽管本周增加了总额,虽然我知道所有筹集的资金总额,今年到目前为止已经筹集了多少,但去年的总额没有任何显示。很明显,今年我可以把今年的总数从总数中扣除,但我真的需要每年的总数来显示。

我在页面上显示了一个表格,显示了每年的筹款目标,并且我希望在该表格中添加年度总额,以便随着时间的推移我们可以看到每年的目标和筹集的金额年。

在显示的运行总计页面的位,我有以下,这显示总计,并且总本年度:

$result = mysql_fetch_array($query);
$sumtotal = $result["sum_total"];

$query2 = mysql_query("SELECT SUM(amountraised) AS year_total FROM fundraisingtotal WHERE YEAR(date)= YEAR(CURDATE());” );
$ RESULT2 = mysql_fetch_array($ QUERY2);
$ yeartotal = $ RESULT2 [ “year_total”];
>
<p class="dbpara">The current fundraising total since February 2009 is <b>&pound;<? echo "$sumtotal"; ?></b>.</p>
<p class="dbpara">The current fundraising total for this year (<?php echo date('Y'); ?>) is <b>&pound;<? echo "$yeartotal"; ?></b>.</p>

而且在同一页上我有f的显示?而这正是我遇到的问题,部分原因是筹款总计数据与年度目标分别列在一张表格中(年度目标在表格中只有年份和目标),部分原因是该表格显示年度目标使用while循环将数据从数据库写出到页面。这是我用写出来的表和数据的代码(我已经把表单元格中筹集的,但显然没有代码它):

<?php $query="SELECT * FROM annualtarget ORDER BY year DESC"; $result=mysql_query($query);
$num = mysql_num_rows ($result);
if ($num > 0) {
$i=0;
while ($i < $num) {
$year = mysql_result($result,$i,"year");
$target = mysql_result($result,$i,"target");
$id = mysql_result($result,$i,"id");
echo "<tr><td class=\"yr\"> $year </td><td class=\"tg\"> &pound;$target </td><td class=\"total\"> ???? </td><td class=\"update\"><a href=\"updatetarget.php?id=$id\">Update</a></td><td class=\"delete\"><a href=\"delete.php?id=$id\">Delete</a></td></tr>";
++$i; } } else { echo "<tr><td colspan=\"4\">The database is empty!</td></tr>"; }
mysql_close();
?>

显然是因为我需要一个不同的查询来计算一年的总计,但是我无法弄清楚如何在while循环中工作。我可以使用筹款金额表中的日期来区分日期的年份,但由于每年的目标位于不同的表格中,所以无法正常工作,编码数据库中的年份和总数只是为了显示,如果我可以(如果我能弄清楚如何去做),可以使用数据库来计算它。

我可能在这里丢失了一些可笑的东西,但我无法弄清楚。有没有人有任何想法我可以做到这一点?

+0

感谢抬起头。排序。 ;-) – BlissC 2010-01-28 09:34:08

回答

1
SELECT a.year , SUM(f.amountraised) , a.target 
FROM annualtarget a INNER JOIN fundraisingtotal f ON (a.year = YEAR(f.date)) 
GROUP BY a.year 
+0

Argggh!我忘记了加入(从来没有得到他们的诀窍!) - 我认为这符合我的需要。我已经尝试在PHPMyAdmin中运行它,并且它给出了2009年的总数,同一行上的目标,但总数的路径(大约比我知道的要少2000英镑),并且当我尝试使用它时网页,我无法弄清楚我需要在while循环中使用什么,例如'$ year_total = mysql_result($ result,$ i,“???”);'所以当然会显示MySQL错误 - 警告:mysql_result()[function.mysql-result]:year_total未在MySQL结果索引7中找到......等 – BlissC 2010-01-28 11:04:08

+0

@NeonBlue Blis如果您想查找需要使用AS关键字重命名该变量的year_total变量正如我在答案中所做的那样。 – SorcyCat 2010-01-28 14:37:20

+0

非常感谢你们 - 现在一切正常! :-)这是我完成的查询: 'SELECT a.year,SUM(f.amountraised)AS year_total,a.target FROM annualtarget a INNER JOIN fundraisingtotal f ON(a.year = YEAR(f.date)) GROUP BY a.year ORDER BY year DESC' – BlissC 2010-01-28 20:08:50

2

使用“group by”查询一次获取所有总数。

SELECT YEAR(date) as year, SUM(amountraised) AS year_total 
FROM fundraisingtotal 
GROUP BY YEAR(date) 
+0

谢谢。这给了我今年的总数,但仅在今年(我已经在页面上的其他地方有一个稍微不同的查询(我原来的帖子中的查询2))。如果我拿出'WHERE YEAR(date)= YEAR (CURDATE())'给了我每年的总数(而且由于某种原因,HTML表格中的空白行的年份被列为0),但是从HTML表格的第二列中取出目标。 – BlissC 2010-01-28 10:32:34

+0

D'oh!复制代码时我应该更加小心。纠正了答案。 @ dev-null-dweller的回答看起来很棒,顺便说一句。 – SorcyCat 2010-01-28 14:35:31