Avatar billede wolfgang Praktikant
13. juli 2011 - 22:04 Der er 8 kommentarer og
1 løsning

Semi-avanceret søgning på tværs af flere tabeller

Jeg har længe "bokset" med at få implementeret en søgefunktion på mit site, som indeholder anmeldelser, men jeg har endnu ikke kunne knække koden.
- Der skal kunne søges på mærke, model eller en kombination af begge fra søgefeltet.

Der er 3 tabeller aktive i søgningen. En med anmeldelserne og fremmed-nøgler til mærke og model info, der er gemt i 2 separate tabeller.

Databasen kører på en MS SQL 2008 server.

Hvordan skal SQL'en skrues sammen?


tbl_Reviews
-------------
ReviewID    int
MemberID    int
CatID    int   
ManufacturerID    int   
ModelID    int   
Phase1    nvarchar(MAX)   
Phase2    nvarchar(MAX)   
Phase3    nvarchar(MAX)   
Phase4    nvarchar(MAX)
Phase5    nvarchar(MAX)


tbl_Manufacturer   
-------------
ManufacturerID    int   
Manufacturer    nvarchar(50)   


tbl_models
-------------
ModelID    int   
ManufactorerID    int   
Model    nvarchar(50)
Avatar billede wolfgang Praktikant
14. juli 2011 - 13:18 #1
Skal der aktiveres yderligere for databasen for at søgninger ala dette virke?
Avatar billede Syska Mester
16. juli 2011 - 19:09 #2
Bruger du en ORM?

Ellers er det jo bare at skrue en sql string sammen.

SELECT * FROM table
JOIN "bla tables"
WHERE ( some predicates are true )

Er der noget specifikt du søger ?
Avatar billede wolfgang Praktikant
17. juli 2011 - 00:12 #3
Hej B,

ORM - der er jeg ikke lige med?

Jeg har forsøgt at skrue en SQL streng sammen men mit problem opstår når der foretages en søgning der både inkludere mærke og model...


Sidste del af min SQL ser således ud:

INNER JOIN tbl_RManufacturers       
ON tbl_Reviews.ManufacturerID = tbl_RManufacturers.ManufacturerID "
INNER JOIN tbl_RModels
ON tbl_Reviews.ModelID = tbl_RModels.ModelID
where
tbl_RManufacturers.Manufacturer LIKE '%"&strSearchPhrase&"%'
or
tbl_RModels.Model LIKE '%"&strSearchPhrase&"%'


Er det muligt at kombinere tbl_RManufacturers.Manufacturer og  tbl_RModels.Model ti let "alias" og skyde søgekriteriet af mod det?
Avatar billede Syska Mester
17. juli 2011 - 01:13 #4
Du skal ikke bruge OR men AND i din WHERE clause.

Ellers siger du til den "et af disse 2 udtryk skal være sande" og når du søger på begge ting, vil du jo gerne have at begge er sande.

mvh
Avatar billede wolfgang Praktikant
17. juli 2011 - 10:47 #5
Hmmm.. Det kan jeg ikke helt få til at passe.

Hvis der søges på "BMW M3" vil det ikke matche i nogen af mine LIKE's vil det?
Avatar billede Syska Mester
17. juli 2011 - 15:10 #6
Nu er BMW vel producent og M3 er model.

SÅ logisk set nej, så vil det ikke matche hvis der kun står BMW i producent table og M3 i model table.

Hvis overstående er rigtigt ... ja, så er der ikke så meget du kan gøre.

Du kan lave split på blankspace og søge efter hvert ord i både producent og model.

mvh
Avatar billede wolfgang Praktikant
22. juli 2011 - 23:35 #7
Hej Buzzzz,

Selv om du ikke bragte en løsning på min udfordring, har du alligevel bidraget.

Vil du ikke smide et svar i tråden, så må vi dele og jeg kan lukke emnet.

Pft.
Avatar billede Syska Mester
22. juli 2011 - 23:54 #8
Men hvad endte din løsning med?

Din data er jo ikke opdelt på en måde så det du gerne vil kan lade sig gøre på en smart måde.

Så skal du lave en concatanering af Producent og Model fra de 2 tables og så sammen ligne dem ... med hvad brugeren skrev i søge feltet.

mvh
Avatar billede wolfgang Praktikant
24. juli 2011 - 13:35 #9
Jeg tror at jeg går efter en simpel løsning hvor der blot kan søges på model...
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