Попытка суммировать по месяцам с отметки времени - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь получить сумму за месяц показаний и файл с mysql, дата находится в поле даты и времени в файле sql.

<?php 
$db = new mysqli('localhost', 'php06', 'php06', 'php00');

if (mysqli_connect_errno()) {
  echo "Error: Could not connect to database.  Please try again later.";
  exit;}

$query = "select readingVolume, readingDate from Reading order by readingDate";
$result = $db->query($query);
while($row = $result->fetch_assoc()){
$mysqldate = $row['readingDate'];
$timestamp = strtotime($mysqldate);
$day = date("d", $timestamp);
$month = date("m", $timestamp);
$year = date("Y", $timestamp); 

if ($month = 01){
$JanRead = ($row['readingVolume'] + $JanRead);}
if ($month = 02){
$FebRead = ($row['readingVolume'] + $FebRead);}
if ($month = 03){
$MarRead = ($row['readingVolume'] + $MarRead);}
if ($month = 04){
$AprRead = ($row['readingVolume'] + $AprRead);}
if ($month = 05){
$MayRead = ($row['readingVolume'] + $MayRead);}
if ($month = 06){
$JunRead = ($row['readingVolume'] + $JunRead);}
if ($month = 07){
$JulRead = ($row['readingVolume'] + $JulRead);}
if ($month = 08){
$AugRead = ($row['readingVolume'] + $AugRead);}
if ($month = 09){
$SepRead = ($row['readingVolume'] + $SepRead);}
if ($month = 10){
$OctRead = ($row['readingVolume'] + $OctRead);}
if ($month = 11){
$NovRead = ($row['readingVolume'] + $NovRead);}
if ($month = 12){
$DecRead = ($row['readingVolume'] + $DecRead);}
}

$readingarray = array($JanRead,$FebRead,$MarRead,$AprRead,$MayRead,
                        $JunRead,$JulRead,$AugRead,$SepRead,$OctRead,
                        $NovRead,$DecRead);
print_r($readingarray);                         
?>

Ответы [ 4 ]

3 голосов
/ 11 декабря 2010

Ваша основная проблема заключается в том, что вы используете = для проверки равенства, когда вам следует использовать ==.И не ставьте перед вашими целыми числами 0, если только вы не проводите сравнение строк и префиксы чисел (например, $foo == 1 или $foo == '01).

Вы можете сделать его намного короче, если вынепосредственно вставлен в ваши массивы:

$readingarray[$month] += $row['readingVolume'];

Также обратите внимание, что вы можете выполнить этот запрос через MySQL, если вы группируете по месяцам и делаете SUM().Если бы ваше поле было типа даты, это было бы тривиально.Как отметка времени UNIX, вам сначала нужно преобразовать ее в дату.(Один дополнительный вызов функции MySQL.)

2 голосов
/ 11 декабря 2010

Предполагая, что readingDate является DATE или DATETIME в MySQL, вы, вероятно, хотите что-то вроде:

select SUM(readingVolume) as vol, MONTH(readingDate) from Reading order by readingDate group by MONTH(readingDate)

Кроме того, как указал konforce: вы проверяете равенство с помощью оператора присваивания.

Кроме того, в PHP числа с префиксом 0 интерпретируются как восьмеричные, поэтому 09 на самом деле == 0.

S

1 голос
/ 11 декабря 2010

Вот SQL, который должен делать то же самое, что @ konforce упоминает в своем ответе :

SELECT SUM(readingVolume), FROM_UNIXTIME(readingDate, '%m') as m 
FROM Reading 
GROUP BY m

(Обновление: только что подтверждено, что можно использовать псевдонимы в GROUP BY)

0 голосов
/ 12 декабря 2010

Предполагается, что преобразование метки времени в PHP всегда будет равно метке времени MySQL, что неверно.

Вам нужно сделать работу в MySQL.

ВЫБЕРИТЕ СУММУ (чтение по объему) как объем ИЗ ЧТЕНИЯ ГРУППЫ ПО FROM_UNIXTIME (чтение по дате, '% m')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...