Avatar billede hjalte81 Nybegynder
19. december 2010 - 22:31 Der er 13 kommentarer og
1 løsning

Hjælp til at finde data i mysql database

Hej...

Jeg har denne streng:


$result = mysql_query("SELECT * FROM data WHERE MATCH (kw) AGAINST ('{$term}' IN BOOLEAN MODE)");


I min database er der en række hvor kw = pick something up
der er også en hvor kw = pick up

$term = how to pick up an apple

Jeg vil gerne bruge 'kw' fra min mysql database til at søge i $term for at finde et match.

Hvis jeg kører ovenstående nu, så får jeg et match på 'pick something up'. Det vil jeg ikke ha. Jeg vil kun ha et match på 'pick up'.

Hvordan skal jeg kringle den?
Avatar billede tjens Nybegynder
19. december 2010 - 23:37 #1
Hvad betyder de 2 tuborg-paranteser omkring $term?


Prøv at skifte dem ud med \" så $term får double quotes i start og slut.

Så skulle du søge på frasen i stedet for listen af ord.
Avatar billede hjalte81 Nybegynder
19. december 2010 - 23:51 #2
Tjens>>

Jeg ved faktisk ikke hvad de betyder... Jeg har lidt copy/pasted fra andre sider... Og så vidt jeg kan se gør det ikke nogen forskel om de er der eller ej.


Mit problem er at jeg vil gerne lave et exact match på kw (fra databasen).

Så begge ord i "pick up" skal matche og være tilstede før den vælger noget (se min beskrivelse i det første indlæg).

Jeg har prøvet at sætte "" rundt om kw, og jeg har også prøvet med \", men det virker ikke :(
Avatar billede majbom Novice
20. december 2010 - 03:24 #3
prøv med:
$result = mysql_query("SELECT * FROM data WHERE MATCH (kw) AGAINST ('".$term."' IN BOOLEAN MODE)");
Avatar billede tjens Nybegynder
20. december 2010 - 08:38 #4
Jeg havde overset at din $term var længere end den frase du ønsker exact match på:
$term = how to pick up an apple

Jeg skulle nok have foreslået:

$term = 'how to "pick up" an apple';

i stedet.
Avatar billede hjalte81 Nybegynder
20. december 2010 - 09:20 #5
splazz>>

Det gir det samme resultat ;(
Jeg tænker lidt at det logiske at gøre, ville være at sætte quotes rundt om databasefeltet (kw)...?

tjens>>

Det kan ikke lade sig gøre, fordi $term er en variabel der skifter fra gang til gang.
Avatar billede tjens Nybegynder
20. december 2010 - 10:34 #6
OK, men vil du teste #4 alligevel, så vi kan lære mere om hvordan tekstsøgninger virker i din database.
Avatar billede cronaldo Nybegynder
20. december 2010 - 20:05 #7
forskellen på '.$var.' og '{$var}' er, at $var kommer fra en variabel variabel..

Altså:

$test = 'var';
$$test = 'noget';

print {$test}; // Vil give "noget"
Avatar billede hjalte81 Nybegynder
20. december 2010 - 21:37 #8
Jeg har endelig fundet en løsning. Løsningen er:

$result = mysql_query("SELECT * FROM data WHERE ('$term') REGEXP (kw)");

Det virker... Jeg har ikke helt styr på hvad forskellen er mellem REGEXP og AGAINST er, men det virker ihvertfald nu :)
Avatar billede hjalte81 Nybegynder
05. januar 2011 - 22:54 #9
splazz>> Kan du skrive et svar
Avatar billede majbom Novice
06. januar 2011 - 09:15 #10
det var dig selv der fandt løsningen, behold selv dine point :)
Avatar billede hjalte81 Nybegynder
06. januar 2011 - 20:17 #11
Ja men så alligevel... dit svar var frøet der udviklede sig til en løsning :)
Avatar billede majbom Novice
06. januar 2011 - 20:23 #12
nup du dem bare selv.. jeg har nok :)
Avatar billede hjalte81 Nybegynder
06. januar 2011 - 20:31 #13
Det var da alligevel utrolig svært at få afsat nogle points :)
Avatar billede majbom Novice
07. januar 2011 - 10:04 #14
ja dem slipper du ikke så let af med her du ;)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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