Zapytanie z wyświetlające wyniki z bazy pochodzące z danego miesiąca

0

Witam. Wykonuje właśnie wykres zakupień w poszczególnych miesiącach. Do wyodrębnienia ilości produktów zakupionych w poszczególnych miesiącach używam MONTH, wynik zapisuje do zmiennej ilość, i przyporządkowywuje do wykresu.
Wszystko ok, lecz na pewno się na uniknąć dwunastu zapytań do bazy, do jakiejś mniejszej ilości. Czy znacie taki sposób?

0

Nie wiem czy dobrze Cię rozumiem, bo średnie po polsku to napisane, ale myślę że potrzebujesz użyć GROUP BY.

0

Baza MySql

0

Pokaż w jaki sposób teraz wyciągasz te dane, albo skorzystaj z mojego poprzedniego posta.

0

Dane wyświetlam w ten sposób, do zmiennej zapisują się tylko liczba produktów sprzedana w listopadzie.

		$stmt =$this->db->prepare('SELECT data_zakupu FROM zrealizowane WHERE MONTH(data_zakupu)=11');
		$stmt->execute();
		$date_accomplish = $stmt->rowCount();
1

Zobacz do czego służy SUM, COUNT I GROUP BY.

0

A jak się później odnieść do wartości z poszczególnego miesiąca? Będe wdzięczny za przykład, nawet z głowy.

0

Wykonałem takie zapytanie na razie na listopad i grudzień, zlicza wszystko fajnie, lecz jak przenieść do tabeli poszczególne wartości?

 $view = new VIEW();
		$stmt =$this->db->prepare('SELECT data_zakupu, COUNT(*) FROM zrealizowane WHERE MONTH(data_zakupu)=11 OR MONTH(data_zakupu)=12 GROUP BY MONTH(data_zakupu) ');
		$stmt->execute();
		//$date_accomplish = $stmt->rowCount();
		//echo 'ilość dni w aktualnym miesiącu to: ' . date("t");
		//var_dump(range(1, date("t")));
		//$row = $stmt->fetch(PDO::FETCH_ASSOC);
		foreach($stmt as $row)
		{
			echo '<pre>';
						var_dump($row );
			echo '</pre>';
		}
0

Żeby odnieść się do poszczególnych wartości to to zapytanie według mnie by musiało wyglądać tak

SELECT data_zakupu, COUNT(*) FROM zrealizowane WHERE MONTH(data_zakupu)=11 OR MONTH(data_zakupu)=12 GROUP BY data_zakupu
0

Chciałbym odnieść się do sumy(count) produktów sprzedanych w 11 miesiącu.

0

No to, możesz to w php zliczyć pętlą, albo dać drugie zapytanie coś takiego

SELECT data_zakupu, COUNT(*) FROM zrealizowane WHERE MONTH(data_zakupu)=11 OR MONTH(data_zakupu)=12

CZyli dwa zapytania.

0

A jakie zadanie będzie spoczywało na tym drugim zapytaniu ??

0

1 zapytanie będzie umożliwiało dostęp do każdego elementu, a 2 zapytanie będzie wyciągało sumę elementów z 11 miesiąca.

0

Ok, a jak chciałbym oprócz sumy produktów z 11 miesiąca wyciągnąć sumę także z pozostałych wszystkich jedenastu miesięcy ?

0
SELECT data_zakupu, COUNT(*) FROM zrealizowane WHERE MONTH(data_zakupu)!=11
0
SELECT 
,sum(case month(data_zakupu)=1 then 1 else 0 end) as styczen
,sum(case month(data_zakupu)=2 then 1 else 0 end) as luty
,sum(case month(data_zakupu)=3 then 1 else 0 end) as marzec
,sum(case month(data_zakupu)=4 then 1 else 0 end) as kwiecien
...
,COUNT(*) calyrok
From zrealizowane WHERE year(data_zakupu)=2015

Pisane bez sprawdzenia, chodzi o pokazanie idei...

0

A jak się wtedy odnieść do pojedyńczego rekordu ?

0

Nie rozumiem pytania, to zwróci ci jeden rekord z posumowaniem całego roku, w kolumnach styczen, luty itd.

DODANE:

$view = new VIEW();
$stmt =$this->db->prepare('SELECT 
					,SUM(CASE WHEN MONTH(data_zakupu)=1 THEN 1 ELSE 0 END) AS styczen
					,SUM(CASE WHEN MONTH(data_zakupu)=2 THEN 1 ELSE 0 END) AS luty
					,SUM(CASE WHEN MONTH(data_zakupu)=3 THEN 1 ELSE 0 END) AS marzec
					,SUM(CASE WHEN MONTH(data_zakupu)=4 THEN 1 ELSE 0 END) AS kwiecien
					,SUM(CASE WHEN MONTH(data_zakupu)=5 THEN 1 ELSE 0 END) AS maj
					,SUM(CASE WHEN MONTH(data_zakupu)=6 THEN 1 ELSE 0 END) AS czerwiec
					,SUM(CASE WHEN MONTH(data_zakupu)=7 THEN 1 ELSE 0 END) AS lipiec
					,SUM(CASE WHEN MONTH(data_zakupu)=8 THEN 1 ELSE 0 END) AS siepien
					,SUM(CASE WHEN MONTH(data_zakupu)=9 THEN 1 ELSE 0 END) AS wrzesien
					,SUM(CASE WHEN MONTH(data_zakupu)=10 THEN 1 ELSE 0 END) AS pazdziernik
					,SUM(CASE WHEN MONTH(data_zakupu)=11 THEN 1 ELSE 0 END) AS listopad
					,SUM(CASE WHEN MONTH(data_zakupu)=12 THEN 1 ELSE 0 END) AS grudzien
					,COUNT(*) calyrok
				FROM 
					zrealizowane 
				WHERE 
					YEAR(data_zakupu)=2015');
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<pre>';
echo $row['luty'];
echo '</pre>';
0

Super, dziękuje.

0

Mój serwer nie odczytuje instrukcji case, dlatego musiałem to wykonać bez niej, ale wszystko współpracuje :)

0

Zapomniałem o WHEN w składni, poprawiłem w poscie wyżyej czyli zamiast

SUM(CASE MONTH(data_zakupu)=12 THEN 1 ELSE 0 END) AS grudzien 

powinno byc

SUM(CASE WHEN MONTH(data_zakupu)=12 THEN 1 ELSE 0 END) AS grudzien

0

Podaj adres, prześlę Ci skrzynkę dobrego piwa :)

0

Wy tak na poważnie???

SELECT MONTH(data_zakupu) miesiac, COUNT(*) ile FROM zrealizowane GROUP BY MONTH(data_zakupu)

i masz każdy miesiąc z sumą

0

Jeżeli dane liczysz w dziesiątkach tysięcy wpisów to mądrze byłoby też zapisać sobie przeliczone dane historyczne i nie liczyć ich od nowa za każdym razem, bo i tak się już nie zmienią :)

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