|
| Søgning efter søgeord i artikeldatabase Fra : Jørn Andersen |
Dato : 12-04-01 14:29 |
|
Hej,
Jeg har en artikeldatbase (Access 97), hvor der til hver artikel er
tilknyttet op til 4 søgeord.
Søgeordene er valgt ved opslag i en søgeordstabel i 4 "paralle" felter
(sord1, sord2, sord3, sord4).
Problemet er så: Hvordan laver jeg en forespørgsel, som søger de
artikler frem, som har tilknyttet ét, to eller flere søgeord?
Søgeordene kan være valgt helt vilkårligt i de 4 søgeord-felter.
Man skal altså kunne søge fx hest, ko, gris og fisk i alle 4 felter.
En eller anden fortalte mig, at jeg skulle bruge en hjælpetabel, men
jeg fik aldrig helt fat i, hvad hvordan han mente.
Er der nogen, der kan hjælpe?
På forhånd tak,
Jørn Andersen,
Brønshøj
| |
Dennis Haney (13-04-2001)
| Kommentar Fra : Dennis Haney |
Dato : 13-04-01 13:53 |
|
"Jørn Andersen" <jorn.a@email.dk> skrev i en meddelelse
news:3avVOlBY=S083rMc+asdThsfsnZJ@4ax.com...
> Hej,
>
> Jeg har en artikeldatbase (Access 97), hvor der til hver artikel er
> tilknyttet op til 4 søgeord.
> Søgeordene er valgt ved opslag i en søgeordstabel i 4 "paralle" felter
> (sord1, sord2, sord3, sord4).
>
> Problemet er så: Hvordan laver jeg en forespørgsel, som søger de
> artikler frem, som har tilknyttet ét, to eller flere søgeord?
> Søgeordene kan være valgt helt vilkårligt i de 4 søgeord-felter.
> Man skal altså kunne søge fx hest, ko, gris og fisk i alle 4 felter.
Jeg er ikke helt sikker på jeg forstår hvad du mener.
Vil du have en liste over de poster der kun har eet søgeord eller
tilsvarende med 2, 3, 4 og ingen?
Hvis så, så skriv lige igen...
Vil du have muligheden for at skrive et ord og så søger den alle søgeordne
igennem?
select * from db where sord1 like 'fisk%'
union
select * from db where sord2 like 'fisk%'
union
select * from db where sord3 like 'fisk%'
union
select * from db where sord4 like 'fisk%'
>
> En eller anden fortalte mig, at jeg skulle bruge en hjælpetabel, men
> jeg fik aldrig helt fat i, hvad hvordan han mente.
create table tmphjælp select primærnøgle, sord1 as sord from db;
insert into tmphjælp select primærnøgle, sord2 from db;
insert into tmphjælp select primærnøgle, sord3 from db;
insert into tmphjælp select primærnøgle, sord4 from db;
create table hjælp select distinct * from tmphjælp;
create index hjælpindex on hjælp (sord,primærnøgle)
drop table tmphjælp;
Så kan du søge på
select db.* from db, hjælp where db.primærnøgle=hjælp.primærnøgle and
hjælp.sord like 'fisk%';
pointen er:
Dette virker i MySQL.
hjælp skal kun genereres een gang (hvis det er en statisk database elers
husk at opdater den)
Det er hurtigere, da du søger på et index og svaret ligger i indexet og
derefter joiner på en primærnøgle.
>
> Er der nogen, der kan hjælpe?
håber det var hjælp nok.
Dennis
>
> På forhånd tak,
>
> Jørn Andersen,
> Brønshøj
>
| |
Jørn Andersen (14-04-2001)
| Kommentar Fra : Jørn Andersen |
Dato : 14-04-01 01:38 |
|
On Fri, 13 Apr 2001 14:52:34 +0200, "Dennis Haney" <davh@davh.adsl.dk>
wrote:
Hej Dennis,
<SNIP en masse gode ideer>
>håber det var hjælp nok.
Noget af det gik hen over hovedet på mig - jeg er ikke just nogen
SQL-nørd.
Til gengæld hjalp du mig på sporet af det, jeg i virkeligheden
eftersøgte, nemlig "mange-til-mange-relationer", og efter at have læst
lidt i Access-hjælpen gik det op for mig, hvad det var den hjælpetabel
skulle bruges til
Så jeg har altså omstruktureret min database - hvilket desuden giver
den fordel, at jeg ikke er bundet til et bestemt antal søgeord.
Det giver godt nok en lidt kompleks SQL - til gengæld kan den kopieres
direkte fra Access-forespørgslen og over til ASP, som jeg i sidste
instans skulle bruge den til.
Efterhånden får jeg nok lært, hvad alle disse JOIN's betyder - det er
lidt lettere (i hvert fald for mig) at oveskue en Access-forespørgsel
end en SQL-sætning med 5 INNER JOIN's ...
Så mange tak for hjælpen. Selv om jeg ikke direkte brugte din løsning,
så hjalp den mig på rette spor.
Mvh.
Jørn
--
Jørn Andersen,
Brønshøj
| |
Dennis Haney (20-04-2001)
| Kommentar Fra : Dennis Haney |
Dato : 20-04-01 09:54 |
|
"Jørn Andersen" <jorn.a@email.dk> skrev i en meddelelse
news:ZJnXOm6OKYowYnU3WJk5CGEszmCc@4ax.com...
> On Fri, 13 Apr 2001 14:52:34 +0200, "Dennis Haney" <davh@davh.adsl.dk>
> wrote:
>
> Hej Dennis,
>
> <SNIP en masse gode ideer>
>
> >håber det var hjælp nok.
>
> Noget af det gik hen over hovedet på mig - jeg er ikke just nogen
> SQL-nørd.
> Til gengæld hjalp du mig på sporet af det, jeg i virkeligheden
> eftersøgte, nemlig "mange-til-mange-relationer", og efter at have læst
> lidt i Access-hjælpen gik det op for mig, hvad det var den hjælpetabel
> skulle bruges til
> Så jeg har altså omstruktureret min database - hvilket desuden giver
> den fordel, at jeg ikke er bundet til et bestemt antal søgeord.
Det er jo lækkert nok.
> Det giver godt nok en lidt kompleks SQL - til gengæld kan den kopieres
> direkte fra Access-forespørgslen og over til ASP, som jeg i sidste
> instans skulle bruge den til.
kompleks er ok, hvis det kun laves en gang og man husker at skrive hvad man
har lavet og hvorfor...
> Efterhånden får jeg nok lært, hvad alle disse JOIN's betyder - det er
> lidt lettere (i hvert fald for mig) at oveskue en Access-forespørgsel
> end en SQL-sætning med 5 INNER JOIN's ...
Tja, lige på det punkt tror jeg ikke jeg kan blive enig med dig ;)
> Så mange tak for hjælpen. Selv om jeg ikke direkte brugte din løsning,
> så hjalp den mig på rette spor.
Velbekommen.
Dennis
| |
|
|