Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Łączenie tabel, sumowanie wartości
Forum PHP.pl > Forum > Bazy danych > MySQL
kuba_s
  1. SELECT s.id_sam AS id_sam_s, s.nr_zas, s.masa, k.*, sum(c.waga * c.ilosc) AS razem_waga, c.id_sam
  2. FROM samochod s, karta k, czesc c
  3. WHERE s.id_sam=k.id_sam AND k.stan=1 GROUP BY id_sam_s;


To polecenia ma za zadanie :

Wybrać odpowiednie pola z tabel samochod i karta. To dziala OK. Dla mnie schody sie zaczęły w momencie
sumowania : sum(c.waga * c.ilosc). Jesli zapytanie wyglada jak wyzej, sumuje te wartosci dla kazdego znalezionego wiersza - w kazdej razem_waga jest taka sama waga.

Jesli natomiast zapytam sie tak:

  1. SELECT s.id_sam AS id_sam_s, s.nr_zas, s.masa, k.*, sum(c.waga * c.ilosc) AS razem_waga, c.id_sam
  2. FROM samochod s, karta_demontazu k, czesc c
  3. WHERE s.id_sam=k.id_sam AND k.stan=1 AND k.id_sam=c.id_sam GROUP BY id_sam_s;


zsumuje pola z tabeli czesc powiazane z tabelą karta, ale nie wyswietli tych wierszy które nie mają czego sumować (czyli po prostu nie zgadza się k.id_sam=c.id_sam). Jak wyswitlic te wiersze questionmark.gif
Tabela karta jest połączona z tabelą czesc zero/wiele.
bendi
LEFT JOIN
kuba_s
Oczywiscie uzycie chronionej tabeli dziala smile.gif
Dzieki bendi biggrin.gif

Teraz to wygląda tak :

  1. SELECT s.id_sam AS id_sam_s, s.nr_zas, s.masa, k.*, sum(c.waga * c.ilosc) AS razem_waga, c.id_sam
  2. FROM samochod s, karta_demontazu k LEFT JOIN czesc c ON (k.id_sam=c.id_sam)
  3. WHERE s.id_sam=k.id_sam AND k.stan=1 GROUP BY s.nr_zas;
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.