Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sumowanie tabel, wyświetlanie jako 1 wynik.
Forum PHP.pl > Forum > Bazy danych > MySQL
golphp
Witam.

Chciałbym wyświetlić listę faktur należące do danego klienta.
truktura mojej bazy danych wygląda następująco:

tabela: faktury

id_faktura
numer_faktury
data_wystawienia
data_platnosci

tabela: faktura_uslugi

numer_faktury
nazwa_uslugi
kwota


Moje zapytanie wygląda następująco:

  1. $q="SELECT * FROM faktura, faktura_uslugi WHERE faktura_uslugi.numer_faktury=faktury.numer_faktury";
  2.  
  3. $result = mysql_query( $q );
  4. $num_rows = mysql_num_rows($result);
  5.  
  6. if ($myrow = mysql_fetch_array($result)) {
  7.  
  8. echo "".$myrow["numer_faktury"]."";
  9.  
  10. }


Takie wynik mnie nie satysfakcjonuje, gdyż wyświetla wszystko co jest w tabeli faktura_uslugi a tam sa zapisy do konkretnej faktury (nazwa uslugi itd.)


Chciałbym, żeby wyświetliło mi to jako 1 faktura a nie żeby wyświetało tyle ile pozycji dla konkretnej faktury (czyli muszę zsumować)

Coś mi świta żeby w zapytaniu użyć LEFT JOIN, ale programowaniem zajmuje się od kilku tygodni i nie jestem jeszcze biegły w tych sprawach.

Proszę o pomoc.
IceManSpy
Ale co chcesz podać jako 1 faktura? Bo z każdą linijką sam nie wiesz czego chce. W temacie jest jedna faktura, potem 1. zdanie: "wyświetlić listę faktur należące do danego klienta." - to w końcu jedna czy listę?

Wiec co oznacza * z zapytanie? Nie? -> Wszystko. Zrób sobie SELECT to_co_potrzebuje FROM faktura, faktura_uslugi WHERE faktura_uslugi.numer_faktury=faktury.numer_faktury and where numer_faktury = to_czego_szukasz .
melkorm
1. INNER JOIN - do połączenia wyników.
2. SUM - do zsumowania kwot.
3. GROUP BY - do pogrupowania po odpowiednich fakturach.

Wszystko znajdziesz w manualu MySql'a wraz z przykładami.

P.S. BBCode, bo ninje zamkną Tobie topic.
P.S2. @IceManSpy - przeczytałeś chociaż o co chodzi tongue.gif ?
golphp
Dokładnie lista wyników jaką moje zapytanie wyświetla to tabelka na prezentowanym poniżej screenie:


W tej chwili jak widać wyświetla mi wszystko co w tych dwóch tabelkach jest.

Ja chciałbym zrobić to na przykładzie takim:

ID: Nazwa abonenta: Numer faktury: Kwota brutto:
1 Jan Robak 1/2011 1150
2 Waldemar Twardowski 2/2011 909,74

Czyli wyświetla 1 pozycję dla danej faktury a nie wszystko co z nią związanie. Sumuje kwoty i nie pokazuje wszystkich pozycji jakie są przypisane do danej faktury.
Jak to ułożyć?

EDIT

Jak kolega wskazal dopisalem GROUP BY oraz SUM(cena) i zadzialalo. Dziekuje za pomoc.

Jednak problem jest taki, że cena w jednej fakturze powinna byc 909,74 a pokazuje 909. W czym problem ?
Jak w bazie zapis jest w postacji 141,74 to problem jak 141.74 to wyswietla. :/
IceManSpy
Cytat(melkorm @ 3.06.2011, 18:28:03 ) *
P.S2. @IceManSpy - przeczytałeś chociaż o co chodzi tongue.gif ?

Czytałem 3 razy i nie zrozumiałem smile.gif

Cytat(golphp @ 3.06.2011, 18:39:24 ) *
Jednak problem jest taki, że cena w jednej fakturze powinna byc 909,74 a pokazuje 909. W czym problem ?
Jak w bazie zapis jest w postacji 141,74 to problem jak 141.74 to wyswietla. :/

A jakiego typu jest kolumna z kwotami?
golphp
Cytat(IceManSpy @ 3.06.2011, 19:29:17 ) *
A jakiego typu jest kolumna z kwotami?


Znalazłem, że SUM() wyświetla tylko liczby po kropce, zresztą to widać na przykładzie, że nie działa.
IceManSpy
Cytat(golphp @ 3.06.2011, 19:32:01 ) *
Znalazłem, że SUM() wyświetla tylko liczby po kropce, zresztą to widać na przykładzie, że nie działa.

Pytałem się dlatego, że może funkcja automatycznie np zamienia ciąg znaków z kropką na liczbę, jeśli to jest możliwe, a potem sumuje smile.gif
golphp
Cytat(IceManSpy @ 3.06.2011, 20:15:02 ) *
Pytałem się dlatego, że może funkcja automatycznie np zamienia ciąg znaków z kropką na liczbę, jeśli to jest możliwe, a potem sumuje smile.gif


Zapisuje liczby do bazy w postacji 132,19 (po przecinku), SUM() nie potrafi tego wyświetlić, więc muszę wykombinować jakąś funkcję, która zamieni kropkę na przecinek.

Jak inni to rozwiązują?
melkorm
Cytat
Jak inni to rozwiązują?


Poprawnym polem liczbowym w bazie.
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.