Autor Zpráva
Kalby
Profil
Zdravim,

delam vyhledavani podle urcitych kriterii a mam problem.

Vypisuji seznam projketu , kde vypisuji cislo projektu, dodavatele (toho joinuju z firem), castku atd.

A nyni bych chtel udelat vyhledavani podle faktur (Zda li projekt ma jiz vystavenou, nebo zda li byla k projektu obdrzena Prijata faktura). Dotaz muze byt i kombinovany.

Takze bych nejak potreboval aby dotaz vypadal tak, ze pokud nejaka takova faktura existuje aby se projekt a jeho detaily vypsali, pokud ne aby se vubec nevypisoval. Problem je v tom ze kdyz to udelam tak ze kdyz chci to vyhledavani kombinovat, napriklad ze chci zobrazit jen projekty ktere maji jak vystavene tak prijate faktury a joinuju tu tabulku faktury tak uz to nefunguje

struktura:
projekt (id,castka,dodavatel_id)
faktura(id,projekt_id,typ)
dodavatel(id, nazev)

typ udava zda-li je vystavena nebo prijata. Jeste bych dodal, ze vystavena faktura je vzdy jen jedna. prijatych muze byt vice. Ale to asi nebude mit vliv.

Vi nekdo jak na to? To joinovani s tabulkou dodavatelu tam musi samozrejme zustat. Me nenapadlo jak to delat jednim dotazem. Napadlo me pouze Udelat si 2 dotazy. na prijate a vystavene faktury. Ulozit do poli id projektu kterym dotazy vyhovuji a ty pole pak porovnavat jake indexy jsou stejne a pomoci toho pak sestavit normalne nakonec WHERE projekt_.id=x or projekt_.id=y ....
TomášK
Profil
Nejsem si jist, jestli jsem to pochopil dobře, je tohle to, co chcete?
SELECT 
    projekt.id, ...
    dodavatel.nazev
FROM 
    projekt
    JOIN dodavatel ON projekt.dodavatel_id = dodavatel.id
    JOIN faktura ON faktura.projekt_id = projekt.id
WHERE 
    faktura.typ = 'prijata' OR
    faktura.typ = 'vystavena' 
GROUP BY projekt.id
Kalby
Profil
no blizis se, ale kdyz chci napriklad podminku aby oba typy faktur existovali pro dany projekt, tak pri tehle podmince mi vypise i kdyz existuje jen jedna. A kdyz dam mezi ne and a zkusim si to vypsat tak mi to pro zmenu nevypise zadnej projekt i kdyz takove projekty ktere maji obe faktury existuji.
TomášK
Profil
Co takto? Mělo by to vybrat jen projekty, které mají oba typy faktur.
SELECT 
    projekt.id, ...
    dodavatel.nazev
FROM 
    projekt
    JOIN dodavatel ON projekt.dodavatel_id = dodavatel.id
    JOIN faktura AS prijate ON faktura.projekt_id = projekt.id AND faktura.typ = 'prijata'
    JOIN faktura AS vystavene ON faktura.projekt_id = projekt.id AND faktura.typ = 'vystavene'
GROUP BY projekt.id
Kalby
Profil
supr diky moc funguje jen bych jeste trosku opravil ten kod, ale byla to jen drobnost dik moc

SELECT 
    projekt.id, ...
    dodavatel.nazev
FROM 
    projekt
    JOIN dodavatel ON projekt.dodavatel_id = dodavatel.id
    JOIN faktura AS prijate ON prijate.projekt_id = projekt.id AND prijate.typ = 'prijata'
    JOIN faktura AS vystavene ON vystavene.projekt_id = projekt.id AND vystavene.typ = 'vystavene'
GROUP BY projekt.id



Ještě jedna maličkost, jak na to když bych chtěl vypsat projekty, ktere naopak tu fakturu nemají, na to se mi nějak nepodařilo přijít... Díky
Kajman_
Profil *
Např.

select projekt.* from projekt
left join faktura f on f.projekt_id = projekt.id -- AND f.typ in ('prijata','vystavene')
where f.projekt_id is null

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: