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)