Gå til innhold

Problemer med MySQL spørring


Anbefalte innlegg

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 :green:

 

ps. Bare å spørre hvis det er noe uklart, det var litt vanskelig å forklare

ps2. På forhånd, takk!

Lenke til kommentar
Videoannonse
Annonse

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

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 :green:

Lenke til kommentar

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 av olona
Lenke til kommentar

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 :green:

 

ps. Takk for hjelpen hittil!

Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...