Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zapytanie z data
veyron
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


witam
mamy tabele, w ktorej jest pole daty - pobierany miesiac za pomoca date format(%c) oraz pole kwota.
chcialbym zrobic zestawienie kwot dla danych miesiecy, czyli otrzymac tabelke w postaci:
miesiac | 01-2010 | 02-2010 itd...
kwota | 0 | 20 itd...
przy czym moze sie zdazyc, ze dany miesiac nie wystepuje w bazie i wowczas chcialbym otrzymac kwote 0.
i teraz mam pytanie - czy jest mozliwe, zeby jesli dany miesiac nie wystepuje w bazie np. styczen 2010, to zeby baza zwrocila kwote 0 dla tego miesiaca ? jesli tak, to w jaki sposob ?
pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


Szukasz optymalizacji w niewłaściwym miejscu.

Nie masz takiej tabeli jak napisałeś na początku, te statystyki i tak sobie liczysz na podstawie tabeli zlecenie.
Nie podałeś jak naprawdę te tabele wyglądają, właściwie to nie wiadomo nawet po co te wszystkie łączenia, skoro i tak informacji o firmach nie potrzebujesz.
Wygląda na to, że wszystko co trzeba wiedzieć masz w tabeli zlecenia i tylko na niej powinieneś operować.

Najwięcej czasu nie będzie pochłaniać wykonanie iluś tam zapytań zwracających po 1 linijce zamiast dużego zwracającego wszystko, tylko liczenie zleceń w obrębie jednego miesiąca. Jeżeli baza będzie duża, to liczenie tego bez indeksów będzie głównym źródłem spowolnień. Proponowałbym utworzenie indeksu na data_z w zleceniach, a w zapytaniach operowanie wyłącznie na porównaniach typu mniejsze, większe, równe itp. Czyli dla podanego zakresu dat do wypisania statystyk jaki sobie użytkownik zażyczy liczysz kolejne miesiące w php, w ten sposób by dla każdego miesiąca już przed złożeniem zapytania mieć dwie ograniczające daty, które możesz porównać bez konieczności formatowania dat w sql. Czyli na przykład gotowe zapytanie dla 04.2011 powinno wyglądać tak:
  1. SELECT count(*) AS ilosc_zlecen FROM zlecenie WHERE data_z >= '2011-04-01' AND data_z < '2011-05-01'


Jeśli jednak upierasz się, by wykonać tylko jedno zapytanie, to musisz albo tworzyć tymczasową tabelę w procedurze, albo zdenormalizować trochę swoją bazę, wykorzystując dodatkową tabelę miesiace.

Ten post edytował pmir13 6.05.2011, 09:12:01
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 06:56