![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 2 Dołączył: 19.04.2007 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
Witam, jak w temacie. Mianowicie czy da się pobrać dane raz i dopiero je obrabiać i wyciągać co potrzeba i czy ogólnie warto pobrać całość danych i obrabiać je php, zamiast kilku zapytań?
Nakreślę wątek na moim przykładzie. 1. Mam dane 5 firm z miesięcznymi raportami i robię do każdej zapytanie sumujące w każdej z nich z osobna ostatni zamknięty miesiąc - 5 zapytań, oraz 1 zapytanie które sumuje i wyrzuca na stronę wszystkie firmy razem. Następnie robię 1 zapytanie które wyświetla mi wszystkie firmy i raporty z nich w danym miesiącu wg listingu kolejności dodania i wyświetla je na stronie. Tak więc 7 zpaytań, a drugie 7 zapytań robię z datą jeszcze niezakończonego miesiąca-teraźniejszego który wyświetla dane jako prognoza. Co by było gdybym chciał pobrać dane z całego roku i podzielić je na wyświetlanie każdego miesiąca z każdej firmy i porównywać je na wykresie np słupkowym, albo miesiąc do miesiąca, masakra zapytań? 2. Postanowiłem redukować zapytania i jeden watek teoretycznie chyba rozwiązałem, czyli pobieranie danych z każdej z firm na dany miesiąc - robię foreach'a, bądź "do while" i w WHERE daję zmienną która w pętli przeleci mi wszystkie firmy po np ID, więc tutaj jednym zapytaniem załatwiam kilka zapytań z 5 na 1. Poprawnie?
Czy jest to poprawne myślenie i dobra forma? Pisane z palce nie testowane. Najpierw wole zapytać czy tak się robi ku gwoli dobrych praktyk programowania i czy to nie spowalnia storny np gdy będzie powyżej jakiejś ilości firm/raportów? Bo pierwsze pytanie nasuwa mi się odnośnie tego, że trzeba będzie coś zrobić z nazewnictwem zapytania $raporty_firm, bo zmienna ta będzie posiadała załadowane już kilka firm, a wcześniej miałem $query_firma_1, 2, 3 itd i tak wyrzucałem to na stronie - strukturalnie najpierw jedna firmę, później drugą itd. Jak teraz mam zrobić aby jedna zmienna wyrzuciła mi wszystkie firmy w listingu? Ten post edytował adek- 25.11.2013, 09:26:29 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 958 Pomógł: 574 Dołączył: 23.09.2008 Skąd: wiesz, że tu jestem? Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 2 Dołączył: 19.04.2007 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
CuteOne, ale co w wypadku gdy ilość firm może ulec zmianie - mam formularz dodawania dodatkowych firm, bo jest ich np coraz więcej,a chciałbym uniknąć ciągłego grzebania w kodzie i dodawania ich id, stąd chciałem sumować je zapytaniem.
2. Mam złączony joinem listing firm który mi wyświetla wszystkie raporty z wszystkich firm
ale tutaj bardziej chodziło mi o zapytania które sumują cały miesiąc w poszczególnej firmie i wyświetlają je zsumowane jedna pod drugą, tak aby nie robić tego php a liczyć już w zapytaniu. Ten post edytował adek- 25.11.2013, 09:41:03 |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat CuteOne, ale co w wypadku gdy ilość firm może ulec zmianie - mam formularz dodawania dodatkowych firm, bo jest ich np coraz więcej,a chciałbym uniknąć ciągłego grzebania w kodzie i dodawania ich id, stąd chciałem sumować je zapytaniem. Przeczytaj jeszcze raz co napisal cuteone. Zauwaz, ze nigdzie nie napisal, ze masz recznie wstawiac ID.... A teraz cos ode mnie Skoro pobierasz raporty dla wszystkich firm, to na grzyba robisz tam WHERE na firmy? Skoro wszystkie to wszystkie.
Powód edycji: [nospor]:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
$raporty_firm = "SELECT id_spolki, COUNT(id_raportu) AS ilosc_raportow,
SUM(kapital) AS suma_kapital, SUM(zysk) AS suma_zysk, SUM(sprzedaz) AS suma_sprzedaz, SUM(skup) AS suma_skup FROM raporty WHERE data_raportu = '$data_bilansu' GROUP BY 1"; |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@mmmm a po co tam group by 1 ?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 2 Dołączył: 19.04.2007 Skąd: Częstochowa Ostrzeżenie: (0%) ![]() ![]() |
nospor masz rację, zbyt żwawo podjąłem kroki mówienia w stosunku do analizy tego co napisał CuteOne, ale zrobiłem to dlatego, że w przykładzie zobaczyłem po prostu ID ręcznie wpisane. Wiem już o co chodzi i zastanawiam się czy mam te id firmy również foreachem, bądź dowhilem wrzucić? Zaraz postaram się jeszcze raz przeanalizować i zrobić jakieś zapytanie.
A odnośnie "coś od siebie' to zrobiłem to dlatego, że narazie pobieram x wpisami SQL sumy wartości z x firm, czyli mam 5 wpisow SQL i każdy pobiera zsumowane wartości pojedynczej firmy, które później wyrzucam jeden pod drugim w tabeli.
Tak że pobierałem każdą firmę pojedynczo sumując dany miesiąc w zapytaniu SQL poprzez SUM() i wyświetlałem pojedynczo w rzędach te wartości przykładem powyżej. A dopiero poniżej pobierałem wszystkie firmy i raporty z danego miesiąca innym pojedynczym zapytaniem tak jak mówisz i wyświetlałem wszystkie raporty poniżej tych zsumowanych danych aby widzieć który raport co wnosi. Wiem średniowiecze jeśli chodzi o mój kod i wstępną logikę, ale narazie to był jedyny sposób jaki znałem i potrafiłem wdrożyć - mozolny! I w końcu stwierdziłem że muszę zapytać o podpowiedź osób doświadczonych. ------- edytowano chyba że jest możliwość pobrania wszystkich raportów z wszystkich firm i wszystkich miesięcy i przetrzymywania tego w jakiejś tabeli tymczasowej czy czymś takim żeby nie robić tysiąca zapytań i ewentualnie prostym zapytaniem wyświetlanie żądanej wartości nie sumując i nie przeliczając też funkcjami w PHP? Ten post edytował adek- 25.11.2013, 15:04:50 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Robisz normalne zapytanie jakie miales do tej pory z sumowanie, tylko zamiast WHERE na id_spolki grupujesz po spolce GROUP BY id_spolki. I po sprawie
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
@mmmmmm troche podstaw:
Po group by podaje sie nazwe kolumny, po ktorej chcesz grupowac, a nie wartosc |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Zwracam honor. group by moze przyjmowac pozycje kolumny zamiast jej nazwe.... obled jakis LOL
ciezko bylo napisac: group by id_spolki zamiast group by 1? sadzilem ze grupujesz po wartosci 1 (IMG:style_emoticons/default/wink.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 23:23 |