Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie danych z 3 tabel jednoczescie i zsumowanie danych
Forum PHP.pl > Forum > PHP
miedzna
Mam 3 tabeli:

  1. CREATE TABLE dane_uczestnika (
  2. id int(11) NOT NULL AUTO_INCREMENT,
  3. imie varchar(20) DEFAULT NULL,
  4. nazwisko varchar(45) DEFAULT NULL,
  5. email varchar(70) DEFAULT NULL,
  6. nr_grupy char(1) DEFAULT NULL,
  7. wartosc_gr varchar(255) DEFAULT NULL,
  8. haslo char(6) DEFAULT NULL,
  9. ok char(1) NOT NULL,
  10. kiedy datetime DEFAULT NULL,
  11. PRIMARY KEY (id)
  12. );


  1. CREATE TABLE polec_zaplaty (
  2. id_polec_zaplaty int(11) NOT NULL AUTO_INCREMENT,
  3. dane_uczestnika_id int(11) NOT NULL,
  4. imiePolec_zaplaty varchar(255) DEFAULT NULL,
  5. nazwiskoPolec_zaplaty varchar(255) DEFAULT NULL,
  6. telefonPolec_zaplaty char(14) DEFAULT NULL,
  7. nr_ew char(17) NOT NULL,
  8. etap1 char(1) NOT NULL DEFAULT '0',
  9. etap2 char(1) NOT NULL DEFAULT '0',
  10. etap3 char(1) NOT NULL DEFAULT '0',
  11. DATA datetime NOT NULL,
  12. PRIMARY KEY (id_polec_zaplaty,dane_uczestnika_id)
  13. );


  1. CREATE TABLE punktacja (
  2. id int(11) NOT NULL AUTO_INCREMENT,
  3. dane_uczestnika_id int(11) NOT NULL,
  4. punkty int(11) DEFAULT '0',
  5. ostatniPunkt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  6. PRIMARY KEY (id,dane_uczestnika_id),
  7. KEY punkty_FKIndex1 (dane_uczestnika_id)
  8. );


Próbuję pobrać sumę punktów z tabeli PUNKTACJA, ale pod warunkiem, że :

"SELECT SUM(p.punkty) FROM punktacja p, dane_uczestnika du, polec_zaplaty pz WHERE p.dane_uczestnika_id = du.id AND du.nr_grupy = 1 AND pz.data > '2007-12-22 09:29:24'"

I wywala mi jakieś kosmiczne rzeczy, gdzie jest błąd?
Cotter
Pewnie suma jest dużo większa niż powinna być. Powinienieś dodać warunki opisujące łączenie tabel.

Kod
SELECT SUM(p.punkty) FROM punktacja p, dane_uczestnika du, polec_zaplaty pz
WHERE p.dane_uczestnika_id = du.id AND du.nr_grupy = 1 AND pz.data > '2007-12-22 09:29:24'
AND du.id = pz.dane_uczestnika_id AND du.id = p.dane_uczestnika_id

Ewentualnie możesz użyć JOIN.
Kod
SELECT SUM(p.punkty) FROM punktacja p JOIN dane_uczestnika du JOIN polec_zaplaty pz ON
du.id = pz.dane_uczestnika_id AND du.id = p.dane_uczestnika_id
WHERE p.dane_uczestnika_id = du.id AND du.nr_grupy = 1 AND pz.data > '2007-12-22 09:29:24'
  AND

Zalecam drugie rozwiązanie, bo będzie się szybciej wykonywać.
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.