Zwracanie i operacje na kolumnach wyników

0

Mój kod pobiera z bazy interesujące mnie rzeczy i zapisuje do pliku TXT.
No wszystko fajnie działało dopóty nie dodałem tego badziewia:

SUM(ROUND(`Przejechalem`,1)) AS `Suma`

Chciałem w jednym zapytaniu móc zwrócić sobie wszystkie wyniki z bazy ORAZ sumę kolumny Przejechalem, potraktowaną funkcją ROUND.

W wyniku działania skryptu teraz ... otrzymuję całą sumę (to jest poprawne) ale zapisuje mi się tylko JEDEN i to pierwszy wiersz z tabeli a nie wszystkie :/
Nie rozumiem tego działania. Co się zmieniło?

<?php
require '../config.php';

?>


<form action="?" method="POST">
Podaj rok
<input type="text" name="years" />
<input type="submit" name="added" />
</form>

<?php

if (isset($_POST['added']))
{
	$file = "raport.txt";

	$years = $_POST['years'];



	$link=$db->query("SELECT `data`, ROUND(`Przejechalem`,1) AS `Przejechalem`, SUM(ROUND(`Przejechalem`,1)) AS `Suma` FROM `newsy` WHERE year(data) = $years");
		
		while($row = $link->fetch_array())
		{
			
			
			 $data =  date('d.m.Y',strtotime($row['data']));
			 $Przejechalem = $row['Przejechalem'];
			 $suma = $row['Suma'];
			 echo $do_pliku = $data . "\t" . $Przejechalem . " km\n\r";
			 
			 file_put_contents($file, $do_pliku, FILE_APPEND);
			 
			
		}
	
}


echo "zapisano!";
echo "<br>Suma dla raportu: " .$suma;

?>

2

To wynik tego, że mysql na wiele pozwala, jak choćby użycie funkcji agregujących bez group by z wylistowanymi kolumnami w select, zmień na:

SELECT 
    `data`
    , ROUND(`Przejechalem`,1) AS `Przejechalem`
    , `Suma` 
FROM 
    `newsy` 
    cross join (select SUM(ROUND(`Przejechalem`,1)) AS `Suma`  from `newsy` WHERE year(data) = $years) s
WHERE 
     year(data) = $years

UPDATE:

Z drugiej strony nie musisz tego pobierać z bazy tylko policzyć:

$suma=0;
 while($row = $link->fetch_array())
        {

             $data =  date('d.m.Y',strtotime($row['data']));
             $Przejechalem = $row['Przejechalem'];
             $suma += $row['Przejechalem'];
             echo $do_pliku = $data . "\t" . $Przejechalem . " km\n\r";

             file_put_contents($file, $do_pliku, FILE_APPEND);

        }
0

No ta policzyć na piechotę ... :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1