Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Sumowanie wartości z kolumn, Każdy wiersz to wynik zapytania SELECT z innej tabel MySQL
Therminus
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Mam w php zrobiona tabelkę, w której wiersze zawierają dane z tabel MySQL. Niektóre komórki to nie tylko proste pobranie danych z tabeli MySQL, ale efekt wykonywania działań na danych tabeli (dodawanie, dzielenie, mnożenie). Każdy wiersz to inna tabela. Wierszy (a więc i tabel MySQL) jest około 100.
Zachodzi potrzeba zsumowania wartości liczbowych z kilkunastu kolumn.
Jak to zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Lord
post
Post #2





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


  1. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  2. $suma_br_210_2 = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";


tak nie mozesz tego zapisywać
powinieneś dać to do tablicy

  1. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";


dodanie ci do tablicy umożliwia ci skorzystania z wielu przydatnych funkcji i skrócić kod wielokrotnie

wydaje mi się, że jezeli masz wiele tabel i do każdej ulicy masz nowa tabele to jest to bład. Jezeli masz wiele tabel przechwujących taka sama strukture danych to powinines dodać to do jednej tabeli dodając jakies ID i wtedy masz dużo prostsze zapytania i sensowniejsza strukturę.

Ten kod

  1. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  2. $suma_br_210_2 = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";
  3. $suma_br_210_3 = "SELECT SUM(Pow_Uzyt) as sum_br_210_3 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  4. $suma_br_210_4 = "SELECT SUM(Pow_Uzyt) as sum_br_210_4 FROM `broniewskiego_2-10`";
  5. $suma_br_210_5 = "SELECT SUM(Pow_razem) as sum_br_210_5 FROM `broniewskiego_2-10`";
  6. $suma_br_210_6 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  7. $suma_br_210_7 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_7 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  8. $suma_br_210_8 = "SELECT SUM(Pow_Przynal_IF) as sum_br_210_8 FROM `broniewskiego_2-10`";
  9.  
  10. $result_br_210_1 = @mysql_query($suma_br_210_1);
  11. $result_br_210_2 = @mysql_query($suma_br_210_2);
  12. $result_br_210_3 = @mysql_query($suma_br_210_3);
  13. $result_br_210_4 = @mysql_query($suma_br_210_4);
  14. $result_br_210_5 = @mysql_query($suma_br_210_5);
  15. $result_br_210_6 = @mysql_query($suma_br_210_6);
  16. $result_br_210_7 = @mysql_query($suma_br_210_7);
  17. $result_br_210_8 = @mysql_query($suma_br_210_8);
  18.  
  19. $sum_1_br_210 = mysql_fetch_assoc($result_br_210_1);
  20. $sum_2_br_210 = mysql_fetch_assoc($result_br_210_2);
  21. $sum_3_br_210 = mysql_fetch_assoc($result_br_210_3);
  22. $sum_4_br_210 = mysql_fetch_assoc($result_br_210_4);
  23. $sum_5_br_210 = mysql_fetch_assoc($result_br_210_5);
  24. $sum_6_br_210 = mysql_fetch_assoc($result_br_210_6);
  25. $sum_7_br_210 = mysql_fetch_assoc($result_br_210_7);
  26. $sum_8_br_210 = mysql_fetch_assoc($result_br_210_8);



można skrócić

  1. $suma_br_210 = array();
  2. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  3. $suma_br_210[] = "SELECT SUM(Pow_przynal_zalicz) as sum_br_210_2 FROM `broniewskiego_2-10`";
  4. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_3 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  5. $suma_br_210[] = "SELECT SUM(Pow_Uzyt) as sum_br_210_4 FROM `broniewskiego_2-10`";
  6. $suma_br_210[] = "SELECT SUM(Pow_razem) as sum_br_210_5 FROM `broniewskiego_2-10`";
  7. $suma_br_210[] = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  8. $suma_br_210[] = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_7 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'LU%'";
  9. $suma_br_210[] = "SELECT SUM(Pow_Przynal_IF) as sum_br_210_8 FROM `broniewskiego_2-10`";
  10.  
  11.  
  12. $sum = array();
  13. foreach($suma_br_210 as $r){
  14. $result = @mysql_query($r);
  15. $sum[] = mysql_fetch_assoc($result);
  16. }


kolejna sprawa, nie uzywasz mysqli, a to bład.

Calość niestety wygląda bardzo zle (IMG:style_emoticons/default/smile.gif) Jak chcesz to zrobić dobrze to chyba powinineś zacząć od zaplanowania strukury danych raz jeszcze, bo zle zaplanowane tabele w BD powoduje duzo wiecej problemów niz jest to warte, jak chcesz zeby ci pomóc to napisz jakie masz dane co chcesz uzyskać co będziesz wyszukiwać w tych tabelach itd.

Ten post edytował Lord 2.06.2016, 11:47:09
Go to the top of the page
+Quote Post
Therminus
post
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(Lord @ 2.06.2016, 12:45:45 ) *
wydaje mi się, że jezeli masz wiele tabel i do każdej ulicy masz nowa tabele to jest to bład. Jezeli masz wiele tabel przechwujących taka sama strukture danych to powinines dodać to do jednej tabeli dodając jakies ID i wtedy masz dużo prostsze zapytania i sensowniejsza strukturę.


Tak więc po kolei.
Mam ponad 100 tabel, wszystkie o identycznej strukturze. Bla każdego budynku jedna tabela, plus do tego jeszcze jedna tabela 'dzialki'. Dane budynków, które są tam zawarte to:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  3. `Klatka` int(4) NOT NULL,
  4. `Nr_Nazwa` varchar(20) CHARACTER SET utf8 NOT NULL,
  5. `Kategoria` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  6. `Pow_Uzyt` decimal(7,2) DEFAULT NULL,
  7. `Struktura` varchar(24) CHARACTER SET utf8 DEFAULT NULL,
  8. `Pow_przynal_zalicz` decimal(7,2) DEFAULT NULL,
  9. `Pow_razem` decimal(7,2) DEFAULT NULL,
  10. `Udzial_proc_w_nieruch` decimal(5,2) DEFAULT NULL,
  11. `Data_ust_prawa_odr_wlasn` date DEFAULT NULL,
  12. `Nr_aktu_notar` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  13. `Naz_podm_uzytk` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  14. `Rodz_prawa_do_lok` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  15. `Pow_Uzyt_IF` decimal(7,2) DEFAULT NULL,
  16. `Pow_Przynal_IF` decimal(7,2) DEFAULT NULL


Dane działek:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  3. `Klatka` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `Nr_dzialki` varchar(8) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `Obreb` varchar(20) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `Data_ost_wyp` date DEFAULT NULL,
  7. `Nr_KW` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `Data_ost_wyp_kw` date DEFAULT NULL,
  9. `Wlasn_od` date DEFAULT NULL,
  10. `WU_do` date DEFAULT NULL,
  11. `Akt_not_decyzja` varchar(35) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  12. `Pow_dzial` decimal(4,4) NOT NULL,
  13. `Nr_uchw_zarz` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `Data_uchw_zarz` date DEFAULT NULL,
  15. `Nr_aneksu` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  16. `Data_aneksu` date DEFAULT NULL,
  17. `Uwagi` varchar(15) DEFAULT NULL


Cytat(Lord @ 2.06.2016, 12:45:45 ) *
kolejna sprawa, nie uzywasz mysqli, a to bład.

Myślę, że da się to względnie łatwo naprawić.
Cytat(Lord @ 2.06.2016, 12:45:45 ) *
Calość niestety wygląda bardzo zle (IMG:style_emoticons/default/smile.gif) Jak chcesz to zrobić dobrze to chyba powinineś zacząć od zaplanowania strukury danych raz jeszcze, bo zle zaplanowane tabele w BD powoduje duzo wiecej problemów niz jest to warte, jak chcesz zeby ci pomóc to napisz jakie masz dane co chcesz uzyskać co będziesz wyszukiwać w tych tabelach itd.

Chcę uzyskać przeglądanie tych danych jak wyżej budynkami, a także w zbiorczej tabeli mieć posumowane różne wartości. O tą tabelę zbiorczą się rozbiłem (IMG:style_emoticons/default/smile.gif)
poniżej wklejam link do zrzutu wyglądu danych budynku
http://ifotos.pl/zobacz/bro2-10pn_saaqrwx.png
Może w przyszłości dorzuciłbym jakieś filtrowanie...

Ten post edytował Therminus 2.06.2016, 14:58:02
Go to the top of the page
+Quote Post
Lord
post
Post #4





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----



  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  3. `Klatka` int(4) NOT NULL,
  4. `Nr_Nazwa` varchar(20) CHARACTER SET utf8 NOT NULL,
  5. `Kategoria` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  6. `Pow_Uzyt` decimal(7,2) DEFAULT NULL,
  7. `Struktura` varchar(24) CHARACTER SET utf8 DEFAULT NULL,
  8. `Pow_przynal_zalicz` decimal(7,2) DEFAULT NULL,
  9. `Pow_razem` decimal(7,2) DEFAULT NULL,
  10. `Udzial_proc_w_nieruch` decimal(5,2) DEFAULT NULL,
  11. `Data_ust_prawa_odr_wlasn` date DEFAULT NULL,
  12. `Nr_aktu_notar` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  13. `Naz_podm_uzytk` varchar(20) COLLATE utf8_polish_ci DEFAULT NULL,
  14. `Rodz_prawa_do_lok` varchar(24) COLLATE utf8_polish_ci DEFAULT NULL,
  15. `Pow_Uzyt_IF` decimal(7,2) DEFAULT NULL,
  16. `Pow_Przynal_IF` decimal(7,2) DEFAULT NULL


Dane działek:
  1. `ID` int(3) NOT NULL,
  2. `Ulica` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  3. `Klatka` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  4. `Nr_dzialki` varchar(8) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `Obreb` varchar(20) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `Data_ost_wyp` date DEFAULT NULL,
  7. `Nr_KW` varchar(10) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `Data_ost_wyp_kw` date DEFAULT NULL,
  9. `Wlasn_od` date DEFAULT NULL,
  10. `WU_do` date DEFAULT NULL,
  11. `Akt_not_decyzja` varchar(35) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  12. `Pow_dzial` decimal(4,4) NOT NULL,
  13. `Nr_uchw_zarz` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  14. `Data_uchw_zarz` date DEFAULT NULL,
  15. `Nr_aneksu` varchar(15) CHARACTER SET utf8 COLLATE utf8_polish_ci DEFAULT NULL,
  16. `Data_aneksu` date DEFAULT NULL,
  17. `Uwagi` varchar(15) DEFAULT NULL


Te tabele co masz są dobre. Stwórz tylko kolejna tabele łączącą te 2 tebele gdzie masz id_budynku i id_działki, ewentualnie mozesz jeszcze wyodrębic tabele kategorie gdzie w tabeli budynku masz id_kategorii, a w tabeli kategoria masz id i nazwa i tak powinno działać
Go to the top of the page
+Quote Post
Therminus
post
Post #5





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(Lord @ 5.06.2016, 11:35:39 ) *
Te tabele co masz są dobre. Stwórz tylko kolejna tabele łączącą te 2 tebele gdzie masz id_budynku i id_działki, ewentualnie mozesz jeszcze wyodrębic tabele kategorie gdzie w tabeli budynku masz id_kategorii, a w tabeli kategoria masz id i nazwa i tak powinno działać

Dzięki bardzo.
Co do kategorii lokalu, to faktycznie, aż się prosi, aby stworzyć oddzielną tabelę, bo kategorie są tylko dwie, ale z drugiej strony kolumna kategorie zawiera tylko jedną literę "M" (większość) albo dwie litery "LU" (spora ilość). Nie wiem, czy to się opłaca zmieniać. Wszak indeks i tak trzeba w kolumnie wpisać, a czy to będzie jedna cyfra, czy też jedna lub dwie litery, to moim zdaniem niewielka różnica. Może się mylę, nie wiem.

Muszę jeszcze o jedno zapytać:
Tabela `budynki` będzie zawierać ponad 5700.
Jak w takim razie wyodrębnić budynek? Czy ID mają być unikalne dla każdego wiersza, czy takie same dla każdego budynku (niektóre budynki zawierają kilka klatek)?
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: 7.10.2025 - 13:37