Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc w zapytaniu SQL
Forum PHP.pl > Forum > Przedszkole
saren_as
Witam!
Wkoncu sie poddalem i prosze Was o pomoc. Mam takie tabele:

  1. CREATE TABLE uzytkownicy (
  2. uzytkownik_id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. plec enum('kobieta','mezczyzna','') NOT NULL,
  4. imie varchar(50) NOT NULL,
  5. nazwisko varchar(50) NOT NULL,
  6. PRIMARY KEY (uzytkownik_id)
  7. );
  8.  
  9. INSERT INTO uzytkownicy VALUES (1, 'kobieta', 'Dagmara', 'A');
  10. INSERT INTO uzytkownicy VALUES (2, 'mezczyzna', 'Dariusz', 'B');
  11. INSERT INTO uzytkownicy VALUES (3, 'kobieta', 'Sabina', 'C');
  12.  
  13.  
  14. CREATE TABLE platnosci1 (
  15. platnosc_id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  16. uzytkownik_id mediumint(8) UNSIGNED NOT NULL,
  17. kwota_platnosci decimal(10,2) NOT NULL,
  18. data_platnosci datetime NOT NULL,
  19. PRIMARY KEY (platnosc_id)
  20. );
  21.  
  22. INSERT INTO platnosci1 VALUES (1, 3, 14.40, '2007-04-02 11:37:06');
  23. INSERT INTO platnosci1 VALUES (2, 1, 28.30, '2007-05-14 11:37:18');
  24. INSERT INTO platnosci1 VALUES (3, 2, 34.40, '2007-05-06 11:38:14');
  25. INSERT INTO platnosci1 VALUES (4, 2, 25.60, '2007-05-07 11:38:39');
  26.  
  27.  
  28. CREATE TABLE platnosci2 (
  29. platnosc_id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  30. uzytkownik_id mediumint(8) UNSIGNED NOT NULL,
  31. kwota_platnosci decimal(10,2) NOT NULL,
  32. data_platnosci datetime NOT NULL,
  33. PRIMARY KEY (platnosc_id)
  34. );
  35.  
  36.  
  37. INSERT INTO platnosci2 VALUES (1, 2, 68.20, '2007-04-06 11:37:06');
  38. INSERT INTO platnosci2 VALUES (2, 3, 21.30, '2007-04-12 11:37:18');
  39. INSERT INTO platnosci2 VALUES (3, 3, 54.40, '2007-05-06 11:38:14');
  40. INSERT INTO platnosci2 VALUES (4, 1, 35.70, '2007-05-07 11:38:39');


Pytanie jakie chce do tego ulozyc to:
wszyscy uzytkownicy (tylko po jednym razie) w okresie od...do z podana iloscia zakupow w tym okresie oraz suma platnosci. Dodatkowo jeszcze kiedy jest ostatni termin platnosci.

uzytkownik_id | nazwisko | COUNT(ilosc_platnosci) | SUM(suma_platnosci) | data_platnosci(ta ostatnia)

Ja wklepalem cos takiego, ale nie dziala tak jak powinno:(

  1. SELECT u.uzytkownik_id, u.plec, u.imie, u.nazwisko,
  2. COUNT('p1.uzytkownik_id') ilosc_platnosci, SUM(p1.kwota_platnosci) suma_platnosci, p1.data_platnosci, p2.data_platnosci
  3. FROM uzytkownicy u, platnosci1 p1, platnosci2 p2
  4. WHERE u.uzytkownik_id = p1.uzytkownik_id AND u.uzytkownik_id = p2.uzytkownik_id AND p1.data_platnosci BETWEEN DATE ('2007-04-15') AND DATE ('2007-05-15') AND p2.data_platnosci BETWEEN DATE ('2007-04-15') AND DATE ('2007-05-15')
  5. GROUP BY u.nazwisko


Prosze o pomoc bo widze, ze strasznie mam tu wszystko namotane i nie moge sie polapac. Prosze o rady!
Pozdrawiam!
saren_as
kefirek
Cos w ten desne dodaj sobie tylko warunek where
  1. SELECT *, COUNT(p1.uzytkownik_id) AS ile, SUM(p1.kwota_platnosci) AS suma
  2. FROM platnosci1 p1
  3. LEFT JOIN uzytkownicy u USING(uzytkownik_id)
  4. JOIN platnosci1 p2 GROUP BY u.uzytkownik_id
saren_as
Juz Cie calowalem w reke bo myslalem, ze dziala:)
Niestety wyniki nie sa prawidlowe. Mnozone sa one teraz razy dwa i zakres dat tez dziwnie reaguje. Co jeszcze mozna by bylo tutaj pokombinowac?


EDIT: Ostatnia wypowiedz pomogla wiec dzieki wielkie za zainteresowanie i temat do zamkniecia smile.gif
Pozdrawiam!
kefirek
Spróbuj tak powinno działac. Połoczyłem dwie tabele w jedną oraz dołoczyłem trzecią z uzytkownikami. Bo chyba o to chodziło ? I pogrupowałem po uzytkownik_id Powinno na 100% dzialac
  1. SELECT *, COUNT(uzytkownik_id) AS ile, SUM(kwota_platnosci) AS suma FROM (
  2. (SELECT * FROM platnosci1) UNION
  3. (SELECT * FROM platnosci2)
  4. ) AS razem
  5. LEFT JOIN uzytkownicy USING (uzytkownik_id)
  6. WHERE DATE(data_platnosci) BETWEEN ('2007-04-15') AND ('2007-05-15')
  7. GROUP BY uzytkownik_id
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.