|
| Søgning Fra : Kasper Kamp Simonsen |
Dato : 16-07-02 16:16 |
|
Hej NG,
Jeg er ved at lave en artikel database som skal indeholde nogle artiklen,
min tabel
ser sådan her ud
id
overskrift
appetitvaekker
broedtekst
Nu skal jeg så i ASP have lavet en søge funktionen, og her får jeg brug for
lidt hjælp,
for jeg er lidt i tvivl om hvordan jeg skal lave min søgning.
Jeg har et søge felt på min web side hvor min ide er at man skal kunne
indtaste alle de
ord man gerne vil søge efter, men det bliver jo hurtigt en ret vil søgning
at opbygge
f.eks. hvis man vil søge på tre ord så skal jeg lave en sql sætning der ser
sådan her ud
SELECT id FROM artikel_indhold
WHERE
overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND overskrift
LIKE '%ord1%' OR
overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND appetitvaekker
LIKE '%ord1%' OR
overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND broedtekst
LIKE '%ord1%' OR
overskrift LIKE '%ord1%' AND appetitvaekker LIKE '%ord1%' AND
appetitvaekker LIKE '%ord1%' OR
overskrift LIKE '%ord1%' AND appetitvaekker LIKE '%ord1%' AND broedtekst
LIKE '%ord1%' OR
.........
Så min WHERE bliver jo mega lang, hvordan laver i andre en søge funktion?
/Kasper
| |
Nis Jorgensen (16-07-2002)
| Kommentar Fra : Nis Jorgensen |
Dato : 16-07-02 17:58 |
|
On Tue, 16 Jul 2002 17:15:32 +0200, "Kasper Kamp Simonsen"
<idontlikespam@anywhere.dk> wrote:
>
>f.eks. hvis man vil søge på tre ord så skal jeg lave en sql sætning der ser
>sådan her ud
>
>SELECT id FROM artikel_indhold
>WHERE
> overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND overskrift
>LIKE '%ord1%' OR
> overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND appetitvaekker
>LIKE '%ord1%' OR
> overskrift LIKE '%ord1%' AND overskrift LIKE '%ord1%' AND broedtekst
>LIKE '%ord1%' OR
> overskrift LIKE '%ord1%' AND appetitvaekker LIKE '%ord1%' AND
>appetitvaekker LIKE '%ord1%' OR
> overskrift LIKE '%ord1%' AND appetitvaekker LIKE '%ord1%' AND broedtekst
>LIKE '%ord1%' OR
Jeg formoder at du mener med ord2 og ord3 istedet for nogle af
ord1'erne?
> Så min WHERE bliver jo mega lang, hvordan laver i andre en søge funktion?
Det hurtige hack:
WHERE
overskrift || '$' || appetitvaekker ||'$'|| broedtekst LIKE '%ord1%'
AND
overskrift || '$' || appetitvaekker ||'$'|| broedtekst LIKE '%ord2%'
AND
overskrift || '$' || appetitvaekker ||'$'|| broedtekst LIKE '%ord3%'
(erstat || med relevant konkateneringsoperator)
Det knapt så hurtige hack:
WHERE
(
overskrift LIKE '%ord1%' OR appetitvaekker LIKE '%ord1%' OR broedtekst
LIKE '%ord1%'
)
AND
(
overskrift LIKE '%ord2%' OR appetitvaekker LIKE '%ord2%' OR broedtekst
LIKE '%ord2%'
)
AND
(
overskrift LIKE '%ord3%' OR appetitvaekker LIKE '%ord3%' OR broedtekst
LIKE '%ord3%'
)
Men hvis brødteksten er lang, sutter det nok performancemæssigt lige
meget hvordan du gør det, hvis ikke du fuldtekstindekserer.
--
Nis Jorgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Kasper Kamp Simonsen (16-07-2002)
| Kommentar Fra : Kasper Kamp Simonsen |
Dato : 16-07-02 18:14 |
|
"Nis Jorgensen" <nis@dkik.dk> wrote in message
news:9kj8jucldeopfn3lbm4cibqvcg8klah30s@4ax.com...
> Det knapt så hurtige hack:
>
> WHERE
> (
> overskrift LIKE '%ord1%' OR appetitvaekker LIKE '%ord1%' OR broedtekst
> LIKE '%ord1%'
> )
> AND
> (
> overskrift LIKE '%ord2%' OR appetitvaekker LIKE '%ord2%' OR broedtekst
> LIKE '%ord2%'
> )
Tak, Jeg lavede sådan her
SELECT id, broedtekst, appetitvaekker, overskrift
FROM artikel_indhold
WHERE (id IN
(SELECT id
FROM artikel_indhold
WHERE (broedtekst LIKE '%kasper%') OR
(appetitvaekker LIKE
'%kasper%') OR
(overskrift LIKE
'%kasper%'))) AND (id IN
(SELECT id
FROM artikel_indhold
WHERE (broedtekst LIKE '%test%') OR
(appetitvaekker LIKE
'%test%') OR
(overskrift LIKE
'%test%'))) AND (id IN
(SELECT id
FROM artikel_indhold
WHERE (broedtekst LIKE '%ost%') OR
(appetitvaekker LIKE
'%fht%') OR
(overskrift LIKE
'%ost%')))
> Men hvis brødteksten er lang, sutter det nok performancemæssigt lige
> meget hvordan du gør det, hvis ikke du fuldtekstindekserer.
Brødteksten er på ca 4000 -> 8000 tegn så jeg kan godt være bange for at
jeg får preformance problemer, lige nu har jeg kun 1000 artikler, men om 6.
mdr
har jeg måske 10000 artikler.
Hvordan kan jeg øge hastigheden udover at lave en fuldtekstindekserer?
/Kasper
| |
Nis Jorgensen (16-07-2002)
| Kommentar Fra : Nis Jorgensen |
Dato : 16-07-02 20:05 |
|
On Tue, 16 Jul 2002 19:13:55 +0200, "Kasper Kamp Simonsen"
<idontlikespam@anywhere.dk> wrote:
>Tak, Jeg lavede sådan her
>
>SELECT id, broedtekst, appetitvaekker, overskrift
>FROM artikel_indhold
>WHERE (id IN
> (SELECT id
> FROM artikel_indhold
> WHERE (broedtekst LIKE '%kasper%') OR
> (appetitvaekker LIKE
>'%kasper%') OR
> (overskrift LIKE
>'%kasper%')))
[snip]
Hvad skal de subselects til for? Er du på linjebetaling?
Denne her:
SELECT id, flere, felter
FROM tabel
WHERE (id IN (
SELECT id
FROM tabel WHERE foo
)) AND (id IN (
SELECT id
FROM tabel WHERE bar
))
er præcis det samme som denne her:
SELECT id, flere, felter
FROM tabel
WHERE (foo) AND (bar)
--
Nis Jorgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Kasper Kamp Simonsen (17-07-2002)
| Kommentar Fra : Kasper Kamp Simonsen |
Dato : 17-07-02 10:51 |
|
"Nis Jorgensen" <nis@dkik.dk> wrote in message
news:m3r8ju0iv2pn2v6rj1s14vcdbn2oag3e5j@4ax.com...
> Hvad skal de subselects til for? Er du på linjebetaling?
Nej, jeg er ikke på linjebetaling, men jeg tror nu det er nødvendig.
>
> Denne her:
>
> SELECT id, flere, felter
> FROM tabel
> WHERE (id IN (
> SELECT id
> FROM tabel WHERE foo
> )) AND (id IN (
> SELECT id
> FROM tabel WHERE bar
> ))
>
> er præcis det samme som denne her:
>
> SELECT id, flere, felter
> FROM tabel
> WHERE (foo) AND (bar)
Nej, det giver bestemt ikke samme output.
/Kasper
| |
Kasper Kamp Simonsen (17-07-2002)
| Kommentar Fra : Kasper Kamp Simonsen |
Dato : 17-07-02 11:51 |
|
> er præcis det samme som denne her:
>
> SELECT id, flere, felter
> FROM tabel
> WHERE (foo) AND (bar)
Du har ret, jeg havde bare glemt nogle paranteser :(
Takker
/Kasper
| |
|
|