Avatar billede poull Nybegynder
29. april 2003 - 20:38 Der er 8 kommentarer og
1 løsning

Krav om match med flere søgekriterier

Jeg har følgende 3 tabeller:
Kategorier
- id
- kategorinavn

Billeder
- id
- billededata
         
Referencer
- kategori_id
- billede_id

Hvert billede kan tilhøre flere kategori og det er kædet sammen ved at der i reference-tabellen er en record for hver kategori den tilhører. Et par eksempler fra reference-tabellen kunne være:

kategori_id = 1  &  billede_id = 10
kategori_id = 2  &  billede_id = 10
kategori_id = 1  &  billede_id = 12

Hvis så brugeren vælger kategorien med id 1 og den med 2, så ønsker jeg at vælge de billeder som tilhører begge kategorier. Dvs med de 3 referencer jeg gav som eksempel, så skulle billedet med id 10, vælges.

Selv har jeg prøvet med denne query:
SELECT billeder.* FROM billeder, referencer WHERE (referencer.kategori_id = 1 OR referencer.kategori_id = 2) AND billeder.id = referencer.billeder_id

Men den "kræver" ikke at billedet skal tilhøre begge kategori som er valgt.
Avatar billede mortrr Praktikant
29. april 2003 - 23:17 #1
Hvis det var en anden database, ville den være rimelig enkel, men den nuværende mysql understøtter ikke subselects.

Lige på stående fod, kan jeg ikke komme på andet end nedenstående.

Hvis du ved hvormange kategorier'er der forespørges på, burde du kunne klare det med

SELECT billeder.id, Billeder.billededata FROM billeder, referencer WHERE referencer.kategori_id in (1,2) AND billeder.id = referencer.billede_id GROUP BY billeder.id, Billeder.billededata HAVING COUNT(referencer.kategori_id)=AntalValgteKategorier
Avatar billede poull Nybegynder
29. april 2003 - 23:29 #2
Jeg tester det i morgen, men kan du inden da lige kort forklare hvad GROUP BY gør her .. for det er en af dem jeg ikke er 100% sikker på :)
Avatar billede mortrr Praktikant
29. april 2003 - 23:43 #3
Man bruger normalt group by til at få fat i unikke værdier/værdisæt, sammen med fx antal referencer eller sidste opdateringsdato eller lign.

I din database kunne man bruge det til at hente alle kategorierne, og hvor mange billeder der er i hver:
SELECT id, kategorinavn, count(billede_id) FROM kategorier, referencer
WHERE kategorier.id=referencer.kategori_id
GROUP BY id, kategorinavn ORDER BY kategorinavn
Avatar billede poull Nybegynder
01. maj 2003 - 18:08 #4
Jeg siger takker forløsningen for den virker fint nok .. :)
Avatar billede poull Nybegynder
01. maj 2003 - 18:08 #5
Hmm .. du har ik lige svaret så gør lige det ;)
Avatar billede mortrr Praktikant
01. maj 2003 - 19:08 #6
Nå jo.
Tak for pointene.
Avatar billede poull Nybegynder
01. maj 2003 - 19:14 #7
Du har ik fået dem endnu ;)
Avatar billede mortrr Praktikant
01. maj 2003 - 19:43 #8
Man skal altid tro det bedste om andre, indtil de snyder en så vandet driver.
Avatar billede minau Nybegynder
18. december 2003 - 02:06 #9
hej - jeg kan altså ikke dy mig for at prøve at spørge om mortrr's svar ikke næsten er svar på http://www.eksperten.dk/spm/441298

(jeg kan ik få det til at virke - men har på fornemmelsen at den næsten er der)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester