Суммируйте значения по годам с MySQL / PHP - PullRequest
2 голосов
/ 27 января 2010

У меня небольшая проблема со страницей администратора базы данных, которую я использую для обновления значений и итогов в базе данных MySQL для создания различных цифр и данных для веб-сайта.

Немного предыстории - рассматриваемая таблица базы данных содержит итоги сбора средств для благотворительного книжного киоска, причем таблица имеет три столбца - идентификатор, дату и сумму сбора. Суммирование итогов, собранных за определенный год или текущий год, не является проблемой - у меня уже есть промежуточные итоги с февраля прошлого года, когда начался сбор средств, и один за текущий год, и это работает отлично. Я только что понял, хотя, добавляя в итоговую сумму поднятой на этой неделе, что, хотя я знаю общую сумму всех привлеченных средств и сколько было собрано за этот год, нигде не показано итоговое значение за прошлый год. Очевидно, что за этот год я могу просто взять итоговую сумму за этот год из общей суммы, но мне действительно нужно итоговую сумму за каждый год, который будет показан.

У меня есть таблица, отображаемая на странице, которая показывает целевые показатели по сбору средств на каждый год, и я хочу добавить итоговое значение за год в эту таблицу, чтобы со временем мы могли видеть как целевой показатель для каждого года, так и сумму, собранную в этом году. .

В бите страницы, где отображается промежуточный итог, у меня есть следующее, которое отображает общий итог и итоговый результат за текущий год:

$result = mysql_fetch_array($query);<br> $sumtotal = $result["sum_total"]; </p> <p>$query2 = mysql_query("SELECT SUM(amountraised) AS year_total FROM fundraisingtotal WHERE YEAR(<code>date) = ГОД (КУРДАТА ()); ");
$ 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><br> <p class="dbpara">The current fundraising total for this year (<?php echo date('Y'); ?>) is <b>&pound;<? echo "$yeartotal"; ?></b>.</p>

Также на той же странице у меня отображаются целевые показатели по сбору средств, и именно с этим битом у меня возникла проблема, отчасти потому, что данные по сбору средств объединяют данные в отдельной таблице с годовыми целями (годовые цели в таблице с указанием только года и цели), а отчасти потому, что таблица, отображающая годовую цель, использует цикл while для записи данных из базы данных на страницу. Это код, который я использую для записи таблицы и данных (я поместил ячейку таблицы для итоговой суммы, но для нее явно нет кода):

<code><?php $query="SELECT * FROM annualtarget ORDER BY year DESC"; $result=mysql_query($query);<br> $num = mysql_num_rows ($result);<br> if ($num > 0 ) {<br> $i=0;<br> while ($i < $num) {<br> $year = mysql_result($result,$i,"year");<br> $target = mysql_result($result,$i,"target");<br> $id = mysql_result($result,$i,"id");<br> 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>";<br> ++$i; } } else { echo "<tr><td colspan=\"4\">The database is empty!</td></tr>"; }<br> mysql_close();<br> ?>

Очевидно, потому что мне понадобится другой запрос для вычисления итогов за год, но я не могу понять, как я могу обработать это в цикле while. Я мог бы использовать дату из таблицы сумм по сбору средств, отделив бит года от даты, но поскольку цель для каждого года находится в другой таблице, которая не будет работать, и я действительно не хочу, чтобы закодируйте год и его общее количество в базе данных, чтобы показать, когда я смогу (если смогу выяснить, как это сделать) использовать базу данных для ее расчета.

Я, вероятно, упускаю что-то смехотворно очевидное здесь, но я не могу понять это. Кто-нибудь знает, как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 27 января 2010

Используйте запрос "group by", чтобы получить все ваши суммы сразу.

SELECT YEAR(date) as year, SUM(amountraised) AS year_total 
FROM fundraisingtotal 
GROUP BY YEAR(date)
2 голосов
/ 27 января 2010
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...