Avatar billede kroger Nybegynder
17. juni 2002 - 20:35 Der er 17 kommentarer og
2 løsninger

forsk. opførsel lokal & remote

Jeg har en asp side med en søgefunktion på en mssql7 database. Søgefunktionen er opbygget sådan at når folk søger på flere ord, SKAL dataen indeholde alle ord. Problemet er at det virker fint lokalt, men hos udbyderen (tiscali) virker det som om den ignorer AND funktionen. Min forspørgsel ser således ud:

SELECT navn, by1, adresse, postnr, tlf, email, website, beskrivelse1, beskrivelse, egen_side, kategori FROM ba WHERE (navn like '%dette%' AND navn like '%er%') OR (by1 like '%dette%' AND by1 like '%er%') OR (adresse like '%dette%' AND adresse like '%er%') OR (postnr like '%dette%' AND postnr like '%er%') OR (tlf like '%dette%' AND tlf like '%er%') OR (email like '%dette%' AND email like '%er%') OR (website like '%dette%' AND website like '%er%') OR (beskrivelse1 like '%dette%' AND beskrivelse1 like '%er%') OR (beskrivelse like '%dette%' AND beskrivelse like '%er%') OR (kategori like '%dette%' AND kategori like '%er%') ORDER BY navn; 

E der nogen der en ide til fejlen?

På forhånd tak
  Kroger
Avatar billede kroger Nybegynder
17. juni 2002 - 20:37 #1
Hos tiscali er det også en mssql 7 server...
Avatar billede terry Ekspert
17. juni 2002 - 20:52 #2
kroger>I havent looked closely at your SQL but it DOES seem wrong!

(postnr like '%dette%' AND postnr like '%er%')

what are you expecting here?
Avatar billede terry Ekspert
17. juni 2002 - 20:52 #3
it cant NOT be one thing AND something else!
Avatar billede kroger Nybegynder
17. juni 2002 - 21:00 #4
But what if postnr contains " dette er en test" should it find it, because it contains both "dette" and "er" ?
Avatar billede kroger Nybegynder
17. juni 2002 - 21:01 #5
should = shouldn´t
Avatar billede terry Ekspert
17. juni 2002 - 21:10 #6
kroger>Sorry! I now understand what your trying to do and it SHOULD WORK!
I would try simplifying the SELECT to just a single WHERE ((postnr like '%dette%' AND postnr like '%er%')
top see if you can get that to work and then build on it from there!
I have SQL Server 2000 and it DOES work here an dI cant see why it shouldnt work with 7.0

Also make sure you DO have data to return from the SELECT :o)
Avatar billede terry Ekspert
17. juni 2002 - 21:10 #7
top = to
Avatar billede kroger Nybegynder
17. juni 2002 - 21:13 #8
The funny thing is that i have tried to run it locally and remote, and checked both request to the server, and they are exactly matched, and with the same data in the db, but as stated before they act differently...
Avatar billede kroger Nybegynder
17. juni 2002 - 21:13 #9
And i have tried to minimize the request, with no different result.
Avatar billede terry Ekspert
18. juni 2002 - 08:04 #10
well all I can suggest is that youget intouch with your provider!
Avatar billede tmceu Praktikant
18. juni 2002 - 11:23 #11
Jeg har aldrig set en forskel på 2 servere, der gør at så fundamentale ting i SQL syntaksen skulle opføre sig forskelligt (og jeg har altså efterhånden set en del servere :-)

Hvordan ser din simplificerede SQL ud ?

P.S. Når du nu får ovenstående til at virke, vil det køre super langsomt, hvis der er ret mange data. LIKE er den langsomste måde at søge på overhovedet. Du bør overveje at kigge på full-text indexing.
Avatar billede kroger Nybegynder
19. juni 2002 - 22:27 #12
Okay, jeg fandt årsagen til fejlen, som er en opbygningsfejl. Som den er nu, vil den reagere som ønsket hvis de to ord ligger i samme række, men ikke hvis de ligger i hver sin. Eks.:
Søger på ole bent.

Den vil finde det hvis der er en med navnet "ole bent", men ikke hvis navnet er ole og adressen er "bent iversvej".

Dette er jo lidt en tænkefejl fra min side. Nu er spørgsmålet så: hvordan skal jeg lave kaldet for at få det til at virke på sidste eksempel(ole der bor på bent iversvej)?
Avatar billede kroger Nybegynder
19. juni 2002 - 22:28 #13
Og undskyld for den sene svartid, har været lidt overbebejdet...
Avatar billede tmceu Praktikant
20. juni 2002 - 04:00 #14
Jeg vil igen henlede opmærksomheden på full-text indexing, for alt andet bliver kun work-arounds som ikke holder i længden, hvis din løsning skal være bare en smule skalerbar.

En måde at implementere din søgning uden full-text, kunne være

SELECT * FROM ba WHERE navn + adresse LIKE '%ole%bent%'

Dette kræver dog, at du er 100% sikker på i hvilken rækkefølge du vil søge, da den ikke vil virke med eks.

SELECT * FROM ba WHERE adresse + navn LIKE '%ole%bent%'

Du kunne også opbygge en nærmest uendelig AND-OR konstruktion med LIKE i din WHERE clause, men den vil være total uoverskuelig fra dag 1, for slet ikke at snakke om at vedligeholde.

Derudover vil du med en sådan anvendelse af LIKE, ikke kunne forvente svartider idag (overdrivelse fremmer som bekendt forståelsen :-)
Avatar billede kroger Nybegynder
20. juni 2002 - 17:17 #15
hmm. jeg vil kigge lidt på full text indexing. MEn lige et spørgsmål til: er det ikke dumt at vælge alle kolonner i en tabel frem for at kun vælge dem ud man skal bruge (nu vi er ved perfomance ting)?
Avatar billede terry Ekspert
20. juni 2002 - 19:22 #16
you should only select those you need why waist time loading data over the net which you are just going to throw away!
Avatar billede tmceu Praktikant
20. juni 2002 - 19:50 #17
Du bør naturligvis kun vælge de felter du skal bruge (og de poster du skal bruge), men jeg antog at du kunne abstrahere fra dette i mit eksempel, der gik på WHERE clausen. Jeg så ingen grund til at skrive alle dine felter :)
Avatar billede kroger Nybegynder
25. juni 2002 - 21:18 #18
Min netforbindelse har desværre været nede nogle dage, jeg beklager...

Jeg har omstruktureret det lidt og valgt en anden løsning, men fordi i gad hjælpe kan i jo lige splitte pointene, så hvis du terry gider og poste et svar, kan dig og tmceu dele pointene
Avatar billede terry Ekspert
26. juni 2002 - 08:48 #19
Hope your net connection is stable now, and thanks :o)
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