Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PostgreSQL] przebudowa zapytania
SaMi
post 1.12.2014, 15:34:19
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


Witam,
Mam listę produktów i muszę pobrać dane tych produktów a te z kolei rozrzucone są po różnych tabelach.

Tabele:

projekty:
- id_projekt,
- prefix,
- nazwa,
- puzytkowa,
- kubatura,
...

technologie:
- id_parametry,
- id_projekt,
....

kosztorysy:
- id_parametry,
- id_el_kosztorysowy,
- kwota,
- kwota_syst_gosp,
- kwota_materialy,
...

Tabela technologie zawiera nazwy technologii dla wszystkich projektów zawartych w tabeli projekty
natomiast tabela kosztorysy zawiera koszty tylko dla niektórych projektów.

Wszystko działa jeśli dla wybranych projektów są kosztorysy, jeśli ich nie ma warunek nie jest spełniony i zwraca pusty wynik.
Jak przebudować zapytanie by zwracało informacje o projektach a w przypadku gdy nie ma kosztorysu to pola kwota, kwota_syst_gosp i kwota_materialy mialy wartosc 0.

  1. SELECT p.nazwa,p.prefix,p.puzytkowa, p.kubatura, SUM(ko.kwota), SUM(ko.kwota_syst_gosp), SUM(ko.kwota_materialy)
  2. FROM projekty AS p
  3. INNER JOIN technologie AS te USING(id_projekt)
  4. INNER JOIN kosztorysy AS ko ON ko.id_technologia ko.id_technologia = te.id_parametry
  5. WHERE hide=0 AND mtmstyl=1 AND prefix IN('proj_1','proj_2') AND ko.id_el_kosztorysowy IN(1,1000)
  6. GROUP BY p.nazwa,p.prefix,p.puzytkowa, p.kubatura
  7. ORDER BY nazwa DESC


Ten post edytował SaMi 1.12.2014, 15:58:29


--------------------
Zapraszam na spływy kajakowe rzekami podlasia www.splywy-kajakiem.pl
Go to the top of the page
+Quote Post
mmmmmmm
post 1.12.2014, 20:11:40
Post #2





Grupa: Zarejestrowani
Postów: 1 397
Pomógł: 306
Dołączył: 18.04.2012

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


INNER JOINY zamienić na LEFT JOINY a SUM(...) na Coalesce(SUM(...),0)
Go to the top of the page
+Quote Post
SaMi
post 2.12.2014, 11:23:42
Post #3





Grupa: Zarejestrowani
Postów: 173
Pomógł: 14
Dołączył: 27.03.2004
Skąd: Białystok

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


Dziękuję za naprowadzenie, wszystko śmiga jak należy.

  1. SELECT
  2. p.nazwa,p.prefix,p.puzytkowa, p.kubatura,
  3. Coalesce(SUM(ko.kwota),0) AS cena_sys_zleconym,
  4. Coalesce(SUM(ko.kwota_syst_gosp),0) AS cena_sys_gospodarczym,
  5. Coalesce(SUM(ko.kwota_materialy),0) AS koszt_materialow
  6. FROM projekty AS p
  7. INNER JOIN technologie AS te USING(id_projekt)
  8. LEFT JOIN kosztorysy AS ko ON ko.id_technologia ko.id_technologia = te.id_parametry AND ko.id_el_kosztorysowy IN(1,1000)
  9. WHERE hide=0 AND mtmstyl=1 AND prefix IN('proj_1','proj_2')
  10. GROUP BY p.nazwa,p.prefix,p.puzytkowa, p.kubatura
  11. ORDER BY nazwa DESC


Zastanawiam się jeszcze czy w GROUP BY powinno znajdować się aż tyle elementów. W przykładzie mam tylko 4 ale w rzeczywistym zapytaniu jest ich więcej.

Ten post edytował SaMi 2.12.2014, 11:30:33


--------------------
Zapraszam na spływy kajakowe rzekami podlasia www.splywy-kajakiem.pl
Go to the top of the page
+Quote Post
pasman
post 30.03.2015, 14:03:36
Post #4





Grupa: Zarejestrowani
Postów: 70
Pomógł: 4
Dołączył: 16.03.2012

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


Cytat(SaMi @ 2.12.2014, 11:23:42 ) *
Zastanawiam się jeszcze czy w GROUP BY powinno znajdować się aż tyle elementów. W przykładzie mam tylko 4 ale w rzeczywistym zapytaniu jest ich więcej.



tak.
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 Wersja Lo-Fi Aktualny czas: 19.10.2018 - 21:14