Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie danych z 3 tabel jednoczescie i zsumowanie danych
miedzna
post
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Cotter
post
Post #2





Grupa: Zarejestrowani
Postów: 57
Pomógł: 12
Dołączył: 6.01.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ć.

Ten post edytował Cotter 19.01.2008, 00:55:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:42