Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Łączenie kilku rekordów z jednej tabeli
Forum PHP.pl > Forum > Bazy danych
MateuszRyaN
Witam, mam pytanko odnośnie pewnego zapytania w MySQL.
Chodzi o system faktur, każdy towar na danej fakturze zawiera numer faktury jako id_faktury, czyli jeżeli fakturke wystawiono na jakies 3 produkty mam 3 rekordy o róznych ID z auto increment oraz takimi samymi ID_FAKTURY. NP:

id - id_faktury - towar - kwota_brutto
1 - 1 - produkt1 - 15zł
2 - 1 - produkt2 - 10zł
3 - 1 - produkt3 - 5zł
4 - 2 - produktx - 20zł
5 - 2 - produkty - 1zł

Czy da sie wykonać jedno zapytanie, i puścić to przez tablice asocjacyjną, żeby wyświetlic taki wynik:

faktura nr 1 - produkt1,produkt2,produkt3 - 30zł
faktura nr 2 - produktx,produkty - 21zł

domyslam sie ze na kilku zapytaniach i jakiejś tabeli pomocniczej bez problemu mozna to zrobić...ale czy jest możliwośc zminimalizowania tego do jednego max 2 zapytańquestionmark.gif
Kshyhoo
  1. SELECT id, id_faktury, towar, kwota_brutto,
  2. GROUP_CONCAT(towar SEPARATOR ', ') towar_razem,
  3. SUM(kwota_brutto) AS wartosc_laczna
  4. FROM faktury
  5. WHERE id_faktury=1

Warunek, że chcesz sumować liczby (15+10+5) a nie (15zł+10zł+5zł).
Wynik w SQL:
  1. id id_faktury towar kwota_brutto towar_razem wartosc_laczna
  2. 1 1 produkt1 15 produkt1, produkt2, produkt3 30


A czekaj, bo Ty chcesz listę... to trochę inaczej. Muszę pomyśleć tongue.gif

  1. SELECT id_faktury,
  2. SUM(kwota_brutto) AS laczna_cena,
  3. GROUP_CONCAT(towar SEPARATOR ', ') towar_razem
  4. FROM faktury
  5. GROUP BY id_faktury

Co da w SQL:
  1. id_faktury laczna_cena towar_razem
  2. 1 30 produkt1, produkt2, produkt3
  3. 2 21 produkt4, produkt5
MateuszRyaN
Jesteś człowieku genialny ;P Niech Cie Bóg błogosławi. Łap SOGa.
Wszystko jasne załatwione, temat do zamknięcia smile.gif
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.