Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyliczanie sumy w pętli z dwóch tabel
Forum PHP.pl > Forum > Przedszkole
kda
Witam,

Proszę o radę jak mógł bym wyświetlić zawartość tabeli tab_jeden jednocześnie pobierając kwoty z tab_dwa, strukturę mam taką:

tab_jeden
ID | NAZWA | itd...
1 | Przekładnia |
2 | Koło zębate |
3 | Tasmociąg |


tab_dwa
ID | ID_POW | JM | ILOSC |
1 | 1 | szt | 10
2 | 1 | szt | 25
3 | 2 | mb | 5
4 | 1 | szt | 100
5 | 3 | op | 5
6 | 2 | mb | 10
7 | 3 | mb | 1
8 | 1 | mb | 1
9 | 2 | mb | 15

ID - to unikatowy nr pozycji
ID_POW - jest to nr przypisania pozycji do tabeli tab_jeden czyli jak jest np. 2 to dotyczy pozycji Koło zębate
JM - jednostka miary
ILOSC - ilość jaka jest przyjęta do pozycji

Co chciał bym uzyskać, mianowicie wyświetlenie na stronie tabeli tab_jeden w formie
Lp , Nazwa pozycji , Ilość na stanie ,

edit:
tak opwinien wyświetlić tabele

1 , Przekładnia , 136szt
2 , Koło zębate , 30szt
3 , Taśmociąg , 6szt

a wyświetla tak:

1 , Przekładnia , 136szt
2 , Koło zębate , 166szt (tutaj ma być 30 ale dodaje wartość z wiersza powyżej czyli 30+136)
3 , Taśmociąg , 172szt (analogicznie jak wyżej powinno być 6 a robi 166 + 6)
itd...

i problem mam z policzeniem i wyświetleniem sumy pozycji, jeżeli w tabeli tab_dwa mam tylko jedną pozycję powiązaną z tab_jeden nie ma problemu ale schody zaczynają się gdy przyjęć jest więcej niż jedno.

Pierwsze co to sprawdzam ile mam przyjęć w tab_dwa dla konkretnej pozycji z tab_jeden
  1. $wynik_szcz_mag = mysql_query ("SELECT * FROM tab_dwa where id_pow='$id' AND lokalizacja='$przypisany_magazyn_uzytkownika' ;");
  2. $ile_pozycji_do_zliczenia = mysql_num_rows($wynik_szcz_mag);

jeżeli jest więcej niż jeden to:
  1. if($id == $id_pow AND $ile_pozycji_do_zliczenia > 1 ){//jezeli jest przyjete wiecej niz 1 to sumuje pozycje
  2. $stan_suma+=$faktyczny_stan; // i tu sie zapetla i liczy suma do sumy z poprzenimi liniami !!!!!!!!!!!!!
  3. $ilosc_jest = $stan_suma;
  4. }

I to mi działa prawidłowo tylko przy pierwszej wyświetlonej linii, przy kolejnych suma jest wyświetlana rosnąco, czyli nie zlicza każdej linii z osobna tylko dodaje to co jest w linii + to co jest w linii powyżej, oczywiście ten kod leci w pętli.
adamec
jeżeli chcesz aby niz dodawał do poprzedniej wartości to musisz wyzerować sumę
Ale tak szczerze nie rozumię jaki ma być wynika podaj dokładnie na tym twoim przykładzie co uzyskujesz a co chcesz uzyskać ?
Ale być może skonstuj inaczej SQL mniej więcej ale musisz to dopracować do twojego wyniku
  1. SELECT A.NAZWA, SUM(B.ILOSC)
  2. FROM TAB_JEDEN AS A, TAB_DWA AS B
  3. WHERE A.ID=B.ID_POW
  4. GROUP BY B.ID_POW
mortus
Jednym zapytaniem:
  1. SELECT `t1`.`id`, `t1`.`nazwa`, SUM(`t2`.`ilosc`) AS `stan` FROM `tab_jeden` `t1` LEFT JOIN `tab_dwa` `t2` ON `t1`.`id` = `t2`.`id_pow` GROUP BY `t1`.`id`
kda
@adamec
edytowałem mój post o wyświetlanie tabeli może teraz będzie troszkę jaśniej

@adamec
coś mi ruszyło, jak przeczytasz moje pytanie pewnie się uśmiejcesz, ale mój poziom jest na prawdę niski i cały czas się uczę, mam na chwilę obecną zrobione tak:
  1. $result55 = mysql_query ("SELECT pozycje.id, pozycje.nazwa, pozycje.producent, pozycje.jm, pozycje_szczegoly.ilosc FROM `pozycje`, `pozycje_szczegoly` WHERE pozycje.id = pozycje_szczegoly.id_ GROUP BY pozycje_szczegoly.id_;");
  2.  
  3. print "<TABLE BORDER=1 cellspacing=1 cellpadding=1 width=100%>";
  4. while ($row = mysql_fetch_array($result55)) {
  5.  
  6. print '<TR><TD>'.$row["id"].'</TD><TD>'.$row["nazwa"].'</TD><TD>'.$row["ilosc"].'</TD></TR>';
  7. }

Wyświetla mi id poz, nazwę , oraz ilość (oczywiście nie sumy)
i teraz pytanie, nie bardzo rozumiem co to jest za parametr A oraz B i jak zmodyfikować moje powyższe zapytanie żeby sumowało
  1. SELECT A.NAZWA, SUM(B.ILOSC)


Zapomniałem dodać że jak dodam parametr SUM
  1. $result55 = mysql_query ("SELECT pozycje.id, pozycje.nazwa, pozycje.producent, pozycje.jm, SUM(pozycje_szczegoly.ilosc) FROM `pozycje`, `pozycje_szczegoly` WHERE pozycje.id = pozycje_szczegoly.id_ GROUP BY pozycje_szczegoly.id_;");

to ilość znika w wyświetlonej tabeli
adamec
parametr A i B to tylko alias skrócona nazwa toich tabel poczytaj o "SQL klauzula AS"
kda
już mi wszystko działa, bardzo wam dziękuję za pomoc , w ostateczności zastosowałem przykład:
  1. $zapytanie = "SELECT `t1`.`id`, `t1`.`nazwa`, SUM(`t2`.`ilosc`) AS `stan` FROM `pozycje` `t1` LEFT JOIN `pozycje_szczegoly` `t2` ON `t1`.`id` = `t2`.`id_` GROUP BY `t1`.`id`";



Potrzebuję do tego zapytania dodać sprawdzenie czy dana pozycja pochodzi z odpowiedniego magazynu. Pod zmienną $przypisany_magazyn_uzytkownika mam wartość powiedzmy MAG1 zalogowanego użytkownika, jak dodać tą zmienną do zapytania, kombinowałem w ten sposób ale bez efektu
  1. SELECT `t1`.`id`, `t1`.`nazwa`, `t1`.`symbol_czesci`, `t1`.`nr_kat_producenta`, `t1`.`producent`, `t1`.`jm`, `t1`.`miejsce`, SUM(`t2`.`ilosc`) AS `stan` FROM `pozycje` `t1` LEFT JOIN `pozycje_szczegoly` `t2` ON `t1`.`id` = `t2`.`id_` AND `$przypisany_magazyn_uzytkownika` = `t2`.`lokalizacja` GROUP BY `t1`.`id`

Niestety nie chce działać, jak bym miał porównać tabelę z inną tabelą nie ma problemu ale chcę porównać to co mam w zmiennej $przypisany_magazyn_uzytkownika z tabelą t2 , kolumna lokalizacja

Już sobie poradziłem a oto roziązanie
  1. SELECT `t1`.`id`, `t1`.`nazwa`, `t1`.`symbol_czesci`, `t1`.`nr_kat_producenta`, `t1`.`producent`, `t1`.`jm`, `t1`.`miejsce`, SUM(`t2`.`ilosc`) AS `stan` FROM `pozycje` `t1` LEFT JOIN `pozycje_szczegoly` `t2` ON `t1`.`id` = `t2`.`id_` AND '$przypisany_magazyn_uzytkownika' = `t2`.`lokalizacja` GROUP BY `t1`.`id`
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.