Avatar billede dkkarpen Nybegynder
03. april 2001 - 15:39 Der er 28 kommentarer og
1 løsning

Søgeproblem

Halløj

Jeg har en tabel med følgende udseende:

id ord
1  mand
1  kvinde
1  barn
2  baby
2  kid
2  lam

osv.

Jeg vil gerne kunne søge i ordene som var de placeret sammen med deres id brødre.

Altså en søgning på \"mand and kvinde\" skulle gerne spytte id = 1 ud.

Tabellen rummer over 11.000 rækker. Så performance skal overvejes. Hvordan klarer jeg den?
Avatar billede dudal Nybegynder
03. april 2001 - 15:42 #1
Hvad så hvis der søges på \"baby AND mand AND lam\"

Avatar billede dudal Nybegynder
03. april 2001 - 15:43 #2
Ellers

SELECT DISTINCT(ID) FROM tabel Where ord = \'mand\' OR ord = \'kvinde\'

Dette vil returnere 1

Men ved ovenstående eksempel vil det returnere 1, 2

/Jesper
Avatar billede dkkarpen Nybegynder
03. april 2001 - 15:44 #3
Så skal det ikke give noget resultat. Jeg forestiller mig en forespørgsel som var ordene med fælles id placeret i samme celle.
Avatar billede netsrac Praktikant
03. april 2001 - 15:44 #4
Hvad skulle der i vejen for at bruge denne ?
select id from tabel where ord = \" & sog1 & \" AND ord = \" & sog2
Avatar billede netsrac Praktikant
03. april 2001 - 15:45 #5
select id from tabel where ord = \'\" & sog1 & \"\' AND ord = \'\" & sog2 & \"\'\"
Avatar billede dudal Nybegynder
03. april 2001 - 15:46 #6
netsrac >> Det svarer jo til at skrive (x=1 AND x=2) ...
Avatar billede netsrac Praktikant
03. april 2001 - 15:46 #7
Nå nej...man kan jo ikke finde 2 records...
Avatar billede dkkarpen Nybegynder
03. april 2001 - 15:47 #8
netsrac>>Hvordan passer en søgestreng på f.eks.:

\"mand and kvinde and barn\" ind i din idé?
Avatar billede netsrac Praktikant
03. april 2001 - 15:52 #9
dkkarpen >> Glem det, det kan ikke lade sig gøre på den måde jeg skrev...
Avatar billede dkkarpen Nybegynder
03. april 2001 - 15:53 #10
Andre idéer?
Avatar billede edderper Nybegynder
03. april 2001 - 16:49 #11
Hvis du bruger

SELECT Var(id) AS var, First(id) AS res
FROM myTable
WHERE ord = \"mand\" Or ord =\"kid\"

får du et rs på en række, hvor rs(\"var\") = 0,5 dvs. at der er variation i \"id\"

SELECT Var(id) AS var, First(id) AS res
FROM myTable
WHERE ord = \"mand\" Or ord =\"kvinde\"

giver rs(\"var\") = 0 dvs. ingen variation i \"id\" -> \"res\" er dit svar

NB

SELECT Var(id) AS var, First(id) AS res
FROM myTable
WHERE ord = \"mand\"

giver rs(\"var\") = Null

Avatar billede dkkarpen Nybegynder
04. april 2001 - 09:27 #12
edderper>>Din idé virker ikke helt for mig. Hvis min sql ser således ud:

SELECT Var(smid) AS var, First(smid) AS res FROM stikord where (((stamstikord LIKE \'%barn%\')) AND ((stamstikord LIKE \'%udland%\')))

og barn og udland er to ord med samme id får jeg ikke noget resultat.

Din funktion virker kun med or.
Avatar billede dkkarpen Nybegynder
04. april 2001 - 09:45 #13
Hvordan laver jeg iøvrigt en løkke på din løsning edderper?

do while not rs.eof AND rs(\"var\") <> 0 ??
Avatar billede edderper Nybegynder
04. april 2001 - 09:46 #14
Jammen det var osse det der var meningen; queryen finder alle poster som møder bare et af kriterierne, derefter undersøger var() funktionen om de alle har identisk id/tilhører samme kategori. Hvis dette er tilfældet rapporteres id som \"res\". Var det ikke det du skulle bruge?
Avatar billede dkkarpen Nybegynder
04. april 2001 - 09:47 #15
Ok men jeg kan ikke rigtigt få det til at fungere. Kan du ikke vise et eksempel med en løkke?
Avatar billede edderper Nybegynder
04. april 2001 - 09:53 #16
Jeg er ikke helt med; hvor vil du have en løkke? Du skal måske bruge en løkke til at indsamle variablerne til queryen, men det skulle ikke være nødvendigt at aflæse rs med en løkke - det indeholder kun en række. Måske forstår jeg ikke helt hvad du er ved at lave...
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:02 #17
Jeg skal have et udtræk på alle de id numre der indeholder alle søgeord.

Altså en løkke.

do while not rs.eof
rs.movenext
loop
Avatar billede edderper Nybegynder
04. april 2001 - 10:06 #18
Jeg forstod på dit svar til dudal at søgning på ord med forskellig id ikke skulle give noget resultat?
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:08 #19
Det skal det heller ikke. Derfor skal der laves en løkke der sorterer disse fra.
Avatar billede edderper Nybegynder
04. april 2001 - 10:12 #20
men de optræder slet ikke i queryens resultat!
Det eneste der er i resultatet er en angivelse af variationen i id (0 eller Null hvis alle er ens) for kombinationen af ord, samt et tal for id. Hvis variationen er 0 eller null er id dit svar.
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:13 #21
Hvis jeg har:

id  ord
1  mand
1  kvinde
1  abe
2  is
2  burger
2  mand
3  mand
3  burger
3  kvinde

Hvis jeg søger på \"mand and kvinde\" skal 1 og 2 returneres.
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:13 #22
Hvis jeg søger på \"mand\" skal 1, 2 og 3 returneres
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:14 #23
Jeg forstår godt hvad du mener. Men jeg kan ikke se hvorledes jeg skal anvende det???
Avatar billede edderper Nybegynder
04. april 2001 - 10:17 #24
hm, ny situation
Avatar billede edderper Nybegynder
04. april 2001 - 10:17 #25
tænker...
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:18 #26
ok
Avatar billede edderper Nybegynder
04. april 2001 - 10:57 #27
Jeg kan ikke lige komme på noget - må løbe.
Måske kunne du lave hver søgning separat og så finde fællesmængden (the intersection) af resultaterne. Der er en SQL kommando IN eller INTERSECTION der gør noget i den retning
Beklager
/per
Avatar billede dkkarpen Nybegynder
04. april 2001 - 10:58 #28
ok
Avatar billede dkkarpen Nybegynder
24. september 2002 - 13:11 #29
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester