/ 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
SQL-trouble!
Fra : Emil


Dato : 15-06-01 10:45

Hejsa NG!
Jeg har lavet mig en lang sql, og sidder nu med en fornemmelse af at jeg
ikke har gjort det særligt optimalt

Mit problem:
Jeg vil generere en sql-streng til at foretage en søgning (vha LIKE) i én
tabel, men i flere forskellige felter, og med x antal ord. Således at hvis
bare ét af de ord man søger på findes i min. ét af de felter man søger i,
skal posten hentes..
- Det er for så vidt heller ikke noget problem.. Problemet kommer når jeg så
gerne vil have dem sorteret efter relevans. Dvs. sådan at de poster hvori
der blev fundet flest søgeord står øverst, og dem der kun indeholdt et
enkelt søgeord står nederst.
Jeg ville helst hvis det kunne mokkes ind i en enkelt sql-streng.

Min nuværende løsning:
Måden jeg gør det på nu fungerer i og for sig, men sql'en bliver enddog
ganske lang. Herunder ses den for en søgning på 2 ord i 4 felter:
(sql-generatoren kan findes på http://emil.fixware.dk/sql.asp , hvis I vil
se hvor drastisk længden stiger, når man fylder et par ord mere på).

Er der en smartere måde? (..eller er det smartere at bruge flere sql'er?)

Håber I kan hjælpe!
\Emil

SELECT * FROM Tabel Where
(Tabel.Felt1 LIKE '*ord1*') OR
(Tabel.Felt2 LIKE '*ord1*') OR
(Tabel.Felt3 LIKE '*ord1*') OR
(Tabel.Felt4 LIKE '*ord1*') OR
(Tabel.Felt1 LIKE '*ord2*') OR
(Tabel.Felt2 LIKE '*ord2*') OR
(Tabel.Felt3 LIKE '*ord2*') OR
(Tabel.Felt4 LIKE '*ord2*')
ORDER BY
(((Tabel.Felt1 LIKE '*ord1*') OR (Tabel.Felt2 LIKE '*ord1*') OR (Tabel.Felt3
LIKE '*ord1*') OR (Tabel.Felt4 LIKE '*ord1*')) AND ((Tabel.Felt1 LIKE
'*ord2*') OR (Tabel.Felt2 LIKE '*ord2*') OR (Tabel.Felt3 LIKE '*ord2*') OR
(Tabel.Felt4 LIKE '*ord2*'))),
(((Tabel.Felt1 LIKE '*ord1*') OR (Tabel.Felt2 LIKE '*ord1*') OR (Tabel.Felt3
LIKE '*ord1*') OR (Tabel.Felt4 LIKE '*ord1*')))

 
 
Kaj N (16-06-2001)
Kommentar
Fra : Kaj N


Dato : 16-06-01 11:45

Hej Emil

Dette er jo et udmærket eksempel på, at det kan være relevant at benytte
'IN'

SELECT * FROM Tabel Where
(Tabel.Felt1 IN ('*ord1*', '*ord2*') ) OR
(Tabel.Felt2 IN ('*ord1*', '*ord2*') ) OR
(Tabel.Felt3 IN ('*ord1*', '*ord2*') ) OR
(Tabel.Felt4 IN ('*ord1*', '*ord2*') )
....

Det hjælper da en smule - især når der kommer mange søgeord

Kaj
Emil <spam@chokoladen.dk> skrev i en
nyhedsmeddelelse:a8fe0894.0106150144.14ea27fb@posting.google.com...
> Hejsa NG!
> Jeg har lavet mig en lang sql, og sidder nu med en fornemmelse af at jeg
> ikke har gjort det særligt optimalt
>
> Mit problem:
> Jeg vil generere en sql-streng til at foretage en søgning (vha LIKE) i én
> tabel, men i flere forskellige felter, og med x antal ord. Således at hvis
> bare ét af de ord man søger på findes i min. ét af de felter man søger i,
> skal posten hentes..
> - Det er for så vidt heller ikke noget problem.. Problemet kommer når jeg

> gerne vil have dem sorteret efter relevans. Dvs. sådan at de poster hvori
> der blev fundet flest søgeord står øverst, og dem der kun indeholdt et
> enkelt søgeord står nederst.
> Jeg ville helst hvis det kunne mokkes ind i en enkelt sql-streng.
>
> Min nuværende løsning:
> Måden jeg gør det på nu fungerer i og for sig, men sql'en bliver enddog
> ganske lang. Herunder ses den for en søgning på 2 ord i 4 felter:
> (sql-generatoren kan findes på http://emil.fixware.dk/sql.asp , hvis I vil
> se hvor drastisk længden stiger, når man fylder et par ord mere på).
>
> Er der en smartere måde? (..eller er det smartere at bruge flere sql'er?)
>
> Håber I kan hjælpe!
> \Emil
>
> SELECT * FROM Tabel Where
> (Tabel.Felt1 LIKE '*ord1*') OR
> (Tabel.Felt2 LIKE '*ord1*') OR
> (Tabel.Felt3 LIKE '*ord1*') OR
> (Tabel.Felt4 LIKE '*ord1*') OR
> (Tabel.Felt1 LIKE '*ord2*') OR
> (Tabel.Felt2 LIKE '*ord2*') OR
> (Tabel.Felt3 LIKE '*ord2*') OR
> (Tabel.Felt4 LIKE '*ord2*')
> ORDER BY
> (((Tabel.Felt1 LIKE '*ord1*') OR (Tabel.Felt2 LIKE '*ord1*') OR
(Tabel.Felt3
> LIKE '*ord1*') OR (Tabel.Felt4 LIKE '*ord1*')) AND ((Tabel.Felt1 LIKE
> '*ord2*') OR (Tabel.Felt2 LIKE '*ord2*') OR (Tabel.Felt3 LIKE '*ord2*') OR
> (Tabel.Felt4 LIKE '*ord2*'))),
> (((Tabel.Felt1 LIKE '*ord1*') OR (Tabel.Felt2 LIKE '*ord1*') OR
(Tabel.Felt3
> LIKE '*ord1*') OR (Tabel.Felt4 LIKE '*ord1*')))





Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste