nAz-guL Skrevet 7. september 2005 Del Skrevet 7. september 2005 Hei jeg har en database problemer med en spørring som skal hente ut informasjon når jeg har en mange-til-mange relasjon. Jeg har en tabell med som heter Bilde, her er det informasjon om bilder med id som PK. Så jeg har en tabell som heter Folk, som inneholder en liste over folk/personer, med id som PK Så har jeg en tabell i midten som heter Bilde_Folk som inneholder to kolonner: b_id og f_id. Disse representerer et bilde som inneholder en Person. Hvis et bilde inneholder flere personer så blir det flere oppføringer på dette bildet. Det jeg da vil gjøre er å kunne søke på bilder utfra hvem som er på bildet. Hvis jeg bare søker på en person går dette greit, men hvis jeg vil hente et bilde som inneholder 2 personer får jeg tilbake en rad for hver av personene og får også tilbake bilder som bare inneholder en av disse. Dette er noe av det jeg har prøvd (galleri greiene er ikke noe å bry seg om): Dette er da et forsøk på å hente ut et bilde som både id 7 og 8 er med på. SELECT* FROM Bilde, Folk_Bilde, Galleri where Bilde.id = Folk_Bilde.b_id && Bilde.galleri = Galleri.id && ( Folk_Bilde.f_id = 7 || Folk_Bilde.f_id = 8) Håper noen har noen tips til hva som må gjøre, må jeg bruker join, underspørring eller noe annet? nAz-guL ps. Bare å spørre hvis det er noe uklart, det var litt vanskelig å forklare ps2. På forhånd, takk! Lenke til kommentar
olona Skrevet 7. september 2005 Del Skrevet 7. september 2005 Tabellstruktur: bilde (bilde_id, m.m) bilde_folk (b_id, f_id, m.m) folk (folk_id, m.m) Du skal ha ut radene hvor det er to personer? Da kan du bruke en subquery som teller opp antall personer for hver bildeid i bilde_folk tabellen. select b_id, count(f_id) from bilde_folk group by b_id Skal det være to spesifikke personer kan du bruke samme logikk vil jeg tro. select b_id from bilde_folk where f_id in (x,y) Kobler du da en av disse spørringene til bilde tabellen er du i mål. Eksempel: select * from bilde b where b.bilde_id in ( select bf.bilde_id from bilde_folk bf group by bf.bilde_id having count(*) >1 ) Håper det hjelper Lenke til kommentar
nAz-guL Skrevet 7. september 2005 Forfatter Del Skrevet 7. september 2005 Takk for svaret, men det var ikke helt sånn jeg hadde tenkt .. ser på første posten min at det kan tolkes på den måten du gjorde. Tabelloppsettet er nesten riktig bilde (bilde_id, m.m) bilde_folk (b_id, f_id) (Disse to er det eneste i denne tabellen) folk (folk_id, m.m) Det vil jeg er å kunne søke etter et bilde som både f.eks folk.id = 3 og folk.id = 4 er med på. Hvis du tenker deg at jeg har disse oppføringene: Bilde (id = 283, tittel = solen, sti = /bilde/sol.jpg) Bilde_Folk (f_id = 3, b_id = 283) Bilde_Folk (f_id = 4. b_id = 283) Folk (id = 3, navn = 'Per') Folk (id = 4, navn = 'Pål') Så vil jeg på min side søke etter bilder som både Per og Pål er med på. Da krysser jeg av på avkrysningsruten for disse to og via php legge det med i spørringen. Problemet mitt da er min spørring(se #1) gir tilbake bilder som begge er med på 2 ganger og den gir tilbake bilder som bare en av de er med på. Håper dette gjør ting litt klarere. nAz-guL Lenke til kommentar
olona Skrevet 7. september 2005 Del Skrevet 7. september 2005 (endret) Er spørsmålet: gi meg BildeID'et hvor PER og PÅL er med på? (alltid to personer? eller skal det være av og til en, av og til begge evnt flere?) edit: Kan du gjøre det i to vendinger? identifisere hvilke bilder som har to personer og så bruke det bildeid? Endret 7. september 2005 av olona Lenke til kommentar
nAz-guL Skrevet 7. september 2005 Forfatter Del Skrevet 7. september 2005 Dette brukes på en side hvor folk laster opp bilder og legger til hvilke personer som er med på bildene, så det kan være fra 0 til 20 personer som er oppført på et bilde. Dette lages så folk skal kunne søke på bilde utfra hvem de vil se. De skal kunne søke på bare en person og de skal kunne søke på flere samtidig. Så poenget er at jeg må få til en spørring som henter ut informasjon om bildet utifra hvilke f_id'er de søker på. For eksempel hvis jeg søker på Pål, vil jeg ha alle bildene som er oppført i Bilde_Folk sammen med f_id = 4, hvis jeg søker på bilde med Per og Pål så vil jeg ha alle bilder som står oppført både med en oppføring av f_id = 3 og en oppføring av f_id = 4. Det er vanskelig å forklare akkuratt hva jeg mener, men håper dette oppklarer litt. nAz-guL ps. Takk for hjelpen hittil! Lenke til kommentar
olona Skrevet 8. september 2005 Del Skrevet 8. september 2005 Jeg skjønner hva du mener nå. Dersom du kan kjøre dette i to omganger ville jeg gjort det. Tror ikke jeg får til èn spørring som gjør det du spør om. Kjører du det i to omganger så går det greit. Identifiserer hvilket eller hvilke bilder som de personeen er på, og så er det bare tut og kjør... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå