Avatar billede radiohead Nybegynder
26. marts 2013 - 13:47 Der er 15 kommentarer og
1 løsning

SELECT til søgefunktion

Jeg er i gang med en søgefunktion, hvor man kan søge på profiler. Profilerne skal findes på baggrund af hvilke kategorier og områder man har valgt i søgefunktionen.

Jeg skal altså have lavet en database-forespørgsel, der går ned i 2 tabeller (profileCategories og profileAreas) og finder de profiler som eksisterer i dem begge.

profileCategories indeholder kolonnerne: 'id', 'ProfileId', 'CategoryId'
profileAreas indeholder kolonnerne: 'id', 'ProfileId', 'AreaId'


Har man valgt området Ribe(som f.eks har id 30) og kategorien IT(som f.eks har id 50) i søgefunktionen, skal jeg selecte alt i tabellen profileCategories hvor 'CategoryId' er 50 og herefter finde ud af om samme profil eksistere i tabellen profileAreas hvor 'AreaId' er 30.

Giver det mening?
Avatar billede radiohead Nybegynder
26. marts 2013 - 14:01 #1
Jeg kunne selvfølgelig starte med at finde alle i profileCategories hvor CategoryId=50 og derefter loope alle rækker igennem for at finde ud af om det samme profileId ligger i profileAreas hvor fldAreaId=30, men det performer nok rimelig skidt.

Kan godt forstå, hvis der er sort snak.. Har lidt svært ved at forklare mig, når jeg selv er ret lost. ;)
Avatar billede arne_v Ekspert
26. marts 2013 - 14:11 #2
En JOIN af de to tabeller med flere WHERE betingelser?
Avatar billede radiohead Nybegynder
26. marts 2013 - 14:26 #3
Sandsynligvis (?) ;)
Kan du give et eksempel på det, som jeg evt. selv kan rette lidt til?
Avatar billede radiohead Nybegynder
26. marts 2013 - 14:29 #4
lige nu vælger jeg først alle i profileCategories hvor categoryId=value

Looper dem igennem for at finde profileId'erne og derefter vælge dem fra profileAreas WHERE profileId IN()
Avatar billede arne_v Ekspert
26. marts 2013 - 14:39 #5
Noget a la:

SELECT *
FROM profileCategories JOIN profileAreas ON profileCategories.ProfileId=profileAreas.ProfileId
WHERE profileCategories.CategoryId=50 AND profileAreas.AreaId=30
Avatar billede radiohead Nybegynder
26. marts 2013 - 14:50 #6
Tak. Jeg prøver at kigge på det i løbet af dagen eller i morgen. Du kan lægge et svar i mellemtiden ;-)
Avatar billede arne_v Ekspert
26. marts 2013 - 14:57 #7
svar
Avatar billede radiohead Nybegynder
27. marts 2013 - 10:27 #8
Jeg tror måske, at vi har misforstået hinanden.

SELECT * FROM tblAdsCategories JOIN tblAdsAreas ON tblAdsCategories.fldAdId=tblAdsAreas.fldAdId WHERE tblAdsCategories.fldCategoryId IN(16, 19, 20) AND tblAdsAreas.fldAreaId=7

Returnerer 0 rækker.

I virkeligheden er der 1 AdId som kvalificerer sig. (ad id 1141)

Se tabel eksempel.

id      fldAdId      fldCategoryId
39...    1141...      20...
38...    1141...      19...
37...    1141...      16...


id      fldAdId        fldAreaId
37...    1141...      7...
36...    1142...      12...
Avatar billede arne_v Ekspert
27. marts 2013 - 13:55 #9
Burde den SQL ikke finde 1141??
Avatar billede radiohead Nybegynder
27. marts 2013 - 13:59 #10
Jeg får i hvert fald ikke returneret nogle rækker.. :/
Avatar billede radiohead Nybegynder
27. marts 2013 - 14:15 #11
Jo, det virker... brainfart fra min side.

Tak arne.
Avatar billede radiohead Nybegynder
27. marts 2013 - 14:18 #12
Kan man på en hurtig, nemt måde få den til kun at vælge distinct fldAdId's? Altså én række per fldAdId?
Avatar billede arne_v Ekspert
27. marts 2013 - 14:24 #13
SELECT * ...

->

SELECT DISTINCT fldAdId ...
Avatar billede radiohead Nybegynder
27. marts 2013 - 14:36 #14
Ambiguous column name 'fldAdId'.
Avatar billede arne_v Ekspert
27. marts 2013 - 14:45 #15
tblAdsCategories.fldAdId
Avatar billede radiohead Nybegynder
27. marts 2013 - 14:57 #16
Right ;) Thx
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