Avatar billede wolfgang Praktikant
22. marts 2006 - 14:13 Der er 17 kommentarer og
1 løsning

Søgefunktion - Søg på 2 navne

Hej med jer,

Jeg har en søgefunktion, der søger på fornavn og efternavn (2 seperate felter i tabellen).
- Min SQL-streng virker 50%

Hvis man kun søger på enten fornavn eller efternavn findes personen, men hvis man søger på personens fulde navn (Fornavn Efternavn) er resultatlisten tom.

Hvordan kan jeg tilpasse min kode, så der kan søges på enten Fornavn, Efternavn eller begge dele?

Her er min nuværende SQL-streng:
select * from tbl_user_data where userFName like '%" & varSearchCriteria & "%' or userLName like '%" & varSearchCriteria & "%' order by userLName,userFName asc

Glæder mig til at høre fra jer.

MVH
Henrik
Avatar billede kalp Novice
22. marts 2006 - 14:20 #1
Det er klart.. der står jo ikke det fulde navn i hverken userFName eller userLName..
Avatar billede wolfgang Praktikant
22. marts 2006 - 14:22 #2
Ahh...
Hvordan kan jeg så få det med i min forespørgsel?
Avatar billede fennec Nybegynder
22. marts 2006 - 14:26 #3
Noget i denne stil:

select * from tbl_user_data where userFName like '%" & varSearchCriteria & "%' or userLName like '%" & varSearchCriteria & "%' or userFName+' '+userFName like '%" & varSearchCriteria & "%' order by userLName,userFName asc
Avatar billede wolfgang Praktikant
22. marts 2006 - 14:34 #4
Hej Fennec, Dit forslag har desværre ingen effekt :(

PS: Jeg har rettet userFName+' '+userFName like '%" & varSearchCriteria & "%' til userFName+' '+userLName like '%" & varSearchCriteria & "%' :)

Andre muligheder?
Avatar billede fennec Nybegynder
22. marts 2006 - 14:47 #5
Hvilken dababase bruger du??
Avatar billede wolfgang Praktikant
22. marts 2006 - 15:00 #6
MS SQL
Avatar billede ffsoft Praktikant
22. marts 2006 - 15:14 #7
strFornavn = "Ole"
strEfternavn = "Petersen"

strSQL = "Select * From tblBruger Where Fornavn Like'%" & strFornavn & "%'" OR
Efternavn Like '%" & strEfternavn & '%;"

Det skal give alle der hedder noget der ligner ole eller petersen.
Avatar billede fennec Nybegynder
22. marts 2006 - 15:23 #8
Så burde denne da virke:
userFName+' '+userLName like '%" & varSearchCriteria & "%'

Har selv brugt den mange gange....
Avatar billede fennec Nybegynder
22. marts 2006 - 15:25 #9
Har lige testen den med denne kode:
(zipcode + ' ' + city LIKE '%6000 ko%')

Og der får jeg alle linjer hvor zipcode 6000 og city er Kolding. Er du sikker på du skrev navnet rigtig da du testede??
Avatar billede wolfgang Praktikant
22. marts 2006 - 16:00 #10
Har lige testet igen, uden held :(

Hvis jeg udskriver SQL'en får jeg dette resultat:
select * from tbl_user_data where userFName+' '+userLName like '%Henrik Bonde%' order by userLName,userFName asc

Det ser rigtig nok ud.

Hvis søren kan ellers være galt?
Avatar billede wolfgang Praktikant
22. marts 2006 - 16:01 #11
FFSoft > Brugeren indtaster sine søgeord i 1 felt.
Avatar billede fennec Nybegynder
22. marts 2006 - 16:08 #12
Hvilken datatype er de 2 felter i databasen??
Avatar billede wolfgang Praktikant
22. marts 2006 - 16:15 #13
Begge felter er af typen nvarchar
Avatar billede fennec Nybegynder
22. marts 2006 - 16:24 #14
Så fatter jeg ikke noget, for det er mine også :(

Du må nok over i noget ala FFSoft's løsning, hvor du deler din varSearchCriteria op i 2 ved " " (space) tegnet.

tmp = split(varSearchCriteria, " ")
if ubound(tmp) >= 1 then
  strFornavn = tmp(0)
  strEfternavn = tmp(1)
end if

Men der løber du ind i en masse problemer med navne som "Hans Jørgen Petersen" (fornavn er 2 navne) eller "Hans Petersen Knudsen" (efternavn er 2 navne)
Avatar billede wolfgang Praktikant
22. marts 2006 - 16:31 #15
Hej igen, Det dur nok heller ikke :(
- Som du selv skriver, vil den løsning ikke virke ved personer med et mellemnavn f.eks.

Er der ingen alternative løsninger, der kan trækkes ind her?

MVH
Henrik
Avatar billede fennec Nybegynder
23. marts 2006 - 08:52 #16
Da FFSoft's løsning ikke kan bruges, og min ikke dur (hvad jeg stadig ikke kan forstå), har jeg kun et ekstra bud.

Men først ville jeg afprøve min løsning en sidste gang, også få tjekket databasen og indtastningen for ekstra mellemrum. Den dur nemlig ikke hvis userFName værdierne er f.eks "fennec " (ekstra mellemrum), eller varSearchCriteria er "fennec Ebruger " (også ekstra mellemrum). Afprøv det evt direkte i "Enterprise Manager" så du er uden om ASP...

Den sidste ide jeg har er en funktion, som kan bygge søgekriterierne op i alle LIKE afskygningerne:

"Hans" skal blive til:
"(userFName like '%Hans%' or userLName like '%Hans%')"

"Hans Jørgen" skal blive til:
"(userFName like '%Hans%' or userLName like '%Hans%') and (userFName like '%Jørgen%' or userLName like '%Jørgen%')"

"Hans Jørgen Petersen" skal blive til:
"(userFName like '%Hans%' or userLName like '%Hans%') and (userFName like '%Jørgen%' or userLName like '%Jørgen%') and (userFName like '%Petersen%' or userLName like '%Petersen%')"

Hvert ord i søgestrengen skal altså blive til (!!husk parenteser!!):
"(userFName like '%SøgeOrd%' or userLName like '%SøgeOrd%')"

Men det giver en mass like søgninger, som tager tid, men det må du så finde dig i...
Avatar billede wolfgang Praktikant
23. marts 2006 - 12:47 #17
Hej igen, Så fandt jeg endelig fejlen!
Jeg blev nød til at trimme felterne i tabellen første - Doh :(

Efter dette var gjort virker Fennec's eksempel 100%.
- Vil du ikke oprette et svar?

Tusind tak for den store hjælp til alle.
Avatar billede fennec Nybegynder
23. marts 2006 - 12:50 #18
.o) <-- One Eyed Jack
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
Kurser inden for grundlæggende programmering

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