DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   Po jedan red iz vezne tabele (umesto vise...blah) (http://www.devprotalk.com/showthread.php?t=2416)

andrej 12. 02. 2007. 18:52

Po jedan red iz vezne tabele (umesto vise...blah)
 
Al sam srocio... nego, sta me muci:

Imam neki model podataka, gde postoji tabela Izvestaj, TipDogadjaja i IzvestajTipDogadjaja (za vise prema vise). Tip dogadjaja je sifarnik.

Ako jedan izvestaj ima vise dogadjaja, normalno, imam vise upisa u veznu tabelu, tipa:
izvestajID|tipdogadjajaID
1 |2
1 |4
1 |8
------------------------
Ono sto pokusavam jeste da prilikom pretrage po tipu dogadjaja, za vrednosti recimo 2 i 8 (na primer, to su Havarija i Poplava), ne dobijem dva reda za isti izvestaj, vec jedan, da bih ga tako i prikazao direktno.

Ja sam dosao do zakljucka da to ne mogu dobiti iz cistog sql-a (iako se nikako ne mogu pohvaliti znanjemistog), pa bih voleo da me demantujete.

Ako ne, na koji nacin to najefikasnije resavate kroz serverski kod?

caiser 12. 02. 2007. 19:35

Ako sam te dobro razumeo, mozes recimo da koristis distinct funkciju.

SELECT DISTINCT(izvestajID) FROM tabela WHERE tipdogadjajaID IN (2, 8);

zextra 12. 02. 2007. 19:53

Ili tako, ili da grupises po nekom polju koje se ne menja (izvestajID npr)

SELECT ... FROM ... WHERE tipdogadjajaID IN (2, 8) GROUP BY izvestajID

ali bih i ja koristio caiserovo resenje.

andrej 12. 02. 2007. 20:29

Ok, probacu sutra to.
Mada sam malo skeptican, jer trebam da povucem inner join-om jos neke podatke iz drugih tabela.

| IzvestajID | Grad | Datum | Radnik(ko je pisao)|

andrej 14. 02. 2007. 20:32

Super, ovo sa DISTINCT mi radi.

Evo kako sam sklepao ceo query:

Kôd:

SELECT DISTINCT (Izvestaj.IzvestajID) AS Izvestaj,
REGION.NazivRegiona, Izvestaj.Datum, Izvestaj.IzvestajID, Sum(TipDogadjajaPoIzvestaju.Kolicina) AS BrojDogadjaja
FROM TipDogadjaja INNER JOIN
(REGION INNER JOIN (Izvestaj INNER JOIN TipDogadjajaPoIzvestaju
ON Izvestaj.IzvestajID = TipDogadjajaPoIzvestaju.IzvestajID)
ON REGION.RegionId = Izvestaj.RegionID)
ON TipDogadjaja.TipDogadjajaID = TipDogadjajaPoIzvestaju.TipDogadjajaID
WHERE ((TipDogadjajaPoIzvestaju.TipDogadjajaID) In (2,8))
GROUP BY REGION.NazivRegiona, Izvestaj.Datum, Izvestaj.IzvestajID;

TipDogadjajaPoIzvestaju je ustvari ona vezna tabela, koja pored dva foreign key-a ima i svoja dva polja.

Jos jedna stvar me interesuje. Naleteo sam na ovaj text gde tip objasnjava neku "tehniku" sa GROUP BY naredbom, i izgleda mi ok, samo ne kapiram bas kako bi kod mene to uglavio, a sve mi se cini da bi moglo :D?

Hvala puno.


Vreme je GMT +2. Trenutno vreme je 13:03.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.