/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Upålitelig svar på søk
Fra : Ann Myhre


Dato : 29-12-02 15:19

Mot en Access bruker jeg dette søket i ASP:

If Request("type") = "tre" Then
sql = "SELECT blomstring, kommentar, hardf, farge, kategori, latinsk_navn
FROM innhold "
sql = sql & " where (blomstring LIKE '%" & strOrd & "%')"
sql = sql & " or (kommentar LIKE '%" & strOrd & "%')"
sql = sql & " or (hardf LIKE '%" & strOrd & "%')"
sql = sql & " or (farge LIKE '%" & strOrd & "%')"
sql = sql & " and kategori = 'tre' "
sql = sql & " order by latinsk_navn"
End If

mm. der setningene
If Request("type") = "tre" Then
og
sql = sql & " and kategori = 'tre' "
varier alt ettersom hvilken kategori jeg ønsker å begrense søket til.

Det funger - jeg får svar. Problemet er at siste krav ( and kategori =
'tre') ikke fungerer konsekvent. Hvis søkeordet kan finnes i en annen
kategori så bryr den seg ikke om at jeg allerede har sagt det bare skal
søkes i kategori = 'tre' (som er en tekststreng), men den henter likevel
bare ett recordset, det første den finner selv om søkeordet (strKeyword) da
kan finnes i mange andre kategorier også. Det er som om jeg tvinger den til
å hente minst ett recordset.
Hvis søkeordet ikke fins i en annen kategori heller så får jeg det svaret
jeg vil ha: response.write "Det fins ikke noe på det søket".

Kategori er en oppslagskolonne - kan det ha noe med saken å gjøre?

Er det noen som skjønner hva jeg gjør galt?



 
 
Jens Gyldenkærne Cla~ (29-12-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 29-12-02 15:36

Ann Myhre skrev:

Jeg navngiver lige dine wherelinjer.

> sql = sql & " where (blomstring LIKE '%" & strOrd & "%')"

A

> sql = sql & " or (kommentar LIKE '%" & strOrd & "%')"

B

> sql = sql & " or (hardf LIKE '%" & strOrd & "%')"

C

> sql = sql & " or (farge LIKE '%" & strOrd & "%')"

D

> sql = sql & " and kategori = 'tre' "

E

Så kan ovenstående udtryk omskrives til:

WHERE A OR B OR C OR D AND E

> Det funger - jeg får svar. Problemet er at siste krav ( and
> kategori = 'tre') ikke fungerer konsekvent.

Det er fordi de booleske udtryk and og or binder anderledes end du
forventer.
Delsætningen :
   WHERE A OR B OR C OR D AND E

kan omskrives til:
   WHERE (A) OR (B) OR (C) OR (D AND E)

- fordi AND binder stærkere end OR. Det du er ude efter er i
stedet:
   WHERE (A OR B OR C OR D) AND E

- som du kan opnå ved at sætte paranteserne. Man kan i øvrigt spare
sig for meget besvær ved altid at sætte paranteser når man skal
blande AND og OR - så er der ikke noget at være i tvivl om.
En sidste ting jeg vil foreslå er at bytte om på rækkefølgen af
kriterierne:

   WHERE E AND (A OR B OR C OR D)

Det vil i mine øjne gøre sætningen lettere at læse - bl.a. fordi
man så begynder med de præcise krav ("kategori = 'tre') og slutter
med wildcardsøgninger.
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO - www.fiduso.dk)
I ovenstående tekst benyttes nyt komma
(rettelser modtages gerne i dk.kultur.sprog)

Ann Myhre (29-12-2002)
Kommentar
Fra : Ann Myhre


Dato : 29-12-02 16:21

Tusen takk! Det var akkurat litt logikk som skulle til ...

Ann

Jens Gyldenkærne Clausen svarte raskt:
> WHERE E AND (A OR B OR C OR D)




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste