/ 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
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



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

Månedens bedste
Årets bedste
Sidste års bedste