Avatar billede food4u.dk Nybegynder
31. juli 2001 - 23:59 Der er 7 kommentarer og
1 løsning

En lidt mere avanceret søgning...

Hejsa

Jeg vil gerne lave min søgning på food4u.dk lidt mere avanceret, ind den er idag.
I dag ser mit SQL-string sådan ud:
SQL = \"SELECT * FROM food4u where godkendt = \'ja\' and opnavn LIKE \'%\" & request(\"opnavn\") & \"%\' and type LIKE \'%\" & request(\"type\") & \"%\' and anledning LIKE \'%\" & request(\"anledning\") & \"%\' and antal LIKE \'%\" & request(\"antal\") & \"%\' and ing LIKE \'%\" & request(\"ing\") & \"%\' order by opnavn

Men da ingredienser indeholder rigtig mange ting, vil jeg gerne have, så man kan skrive:

laks rejer

og så skal den så søge hvor der er laks, hvor der er rejer, og hvor der er begge dele. Som man gør her, og på f.eks. jubii.

Nogle der kan forklare mig hvordan?

Evt. på admin@food4u.dk

/Christoffer

PS: Kommer først igen onsdag klokken ca. 18:30
Avatar billede webmasterdk Praktikant
01. august 2001 - 00:18 #1
Avatar billede tdaugaard Nybegynder
01. august 2001 - 00:36 #2
Du er nødt til at splitte strengen og så opbygge dit SQL kald via det.
Og for at opnå en ordentlig søgning er du også nødt til at replace alle punktummer, kommaer, (semi)kolon\'er, stjerner, minusser osv.
Avatar billede tdaugaard Nybegynder
01. august 2001 - 00:43 #3
Laver et eksempel ..
Avatar billede oswald Nybegynder
01. august 2001 - 12:18 #4
Hvis du bruger SQL server vil jeg helt klart anbefale at bruge \"Full Text Index\".
Så kan du lave forspørsler alá.

SELECT Opskrift.Title, Rowset_1.RANK FROM        CONTAINSTABLE(opskrift, Ingredienser, \'fisk and skaldyr\') Rowset_1 INNER JOIN Article ON Rowset_1.[KEY] = Article.ArticleID ORDER BY Rowset_1.RANK DESC

Det vil give din en liste over alle opskrifter hvor ingerdiens feltet indeholder fisk og skaldyr.

Desuden går det fandens hurtigt. Jeg ændrede en lignende forspørgsel fra ca. 50 sek til under 1 sek ved at bruge full text index.
Avatar billede oswald Nybegynder
01. august 2001 - 12:20 #5
Ud skal naturligvis modificerer dit input med noget i stilen med
seekstr = replace(1,Seek,\" \",\" and \")
og så skal du sætte Full Text Index op hvilket kan give lidt problemer, men resultatet er guld værd.
Avatar billede food4u.dk Nybegynder
01. august 2001 - 16:43 #6
oswald > jeg er totalt lost over det du lige har skrevet, fatter ikke et hak *lol*
Avatar billede oswald Nybegynder
03. august 2001 - 10:24 #7
Ok, jeg var vist lidt kryptisk og maniskt, men jeg er selv meget glad for teknikken. ;)

Hvis du har en SQL server, findes der noget der hedder \"Full Text Index\" der er som designet til det du vil.

Alternativt skal du bryde din tekst op og lave en clause for hvert ord. (\"Laks og skaldyr\" bliver til \"where .... and ing LIKE \'%Laks%\' and ing LIKE \'%skaldyr%\'\") og Like \'% ... %\' er den langsomste type sammenligning du kan lave.

Endnu et alternativ er at opbygge en table over alle ingredienser og så lave en relations tabel mellem ingredienser og opskrifter. men det er en større omgang.
Avatar billede food4u.dk Nybegynder
06. august 2001 - 00:59 #8
tdaugaard > Hvis du laver noget, så send det til admin@food4u.dk

Så får du point
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