Avatar billede s0mmer Nybegynder
13. juli 2008 - 12:26 Der er 8 kommentarer og
1 løsning

Brug af LIKE ved søgning

Hej eksperter.

Kort spørgsmål.. Jeg bruger %LIKE% når jeg søger i min sql database men den vil ikke helt som mig.

Eks.
Jeg har det her liggende i db: mit navn er 1 2 3

Jeg søger på: mit navn er 2 -> Ingen resultater
Jeg søger på: mit navn er 1 -> resultat: mit navn er 1 2 3

Jeg håber i forstår mit eksempel. Lige nu får jeg kun svar hvis den præcise evt delvise ordstilling er ens. Men ikke hvis lad os sige alle de samme ord er brugt, men i forkert ordstilling. Jeg ønsker et resultat afhængig af hvor mange tegn ord der er ens. Ka i hjælpe?
Avatar billede coderdk Praktikant
13. juli 2008 - 13:04 #1
%TO ORD% i en LIKE betyder at "TO ORD" skal indgå - i den rækkefølge "TO SMÅ ORD" vil ikke matche... %TO%ORD% vil matche "TO SMÅ ORD" såvel som "TOVE NORDVIG" ;P
Avatar billede s0mmer Nybegynder
13. juli 2008 - 13:17 #2
Præcis, jeg vil ud af at det skal være den rækkefølge.. nogle forslag?
Avatar billede coderdk Praktikant
13. juli 2008 - 13:30 #3
Det er ikke så optimalt, men du kan splitte din søgning

WHERE felt LIKE '%mit%' AND felt LIKE '%navn%' AND felt LIKE '%er%' AND felt LIKE '%2%'

i.e.

$srchstr = "mit navn er 2";
$sa = explode( " ", $srchstr );
for ( $i = 0;$i < count( $sa ); $i++ )
{
  $sa[$i] = "felt LIKE '%" . $sa[$i] . "%'";
}
$srchstr = implode( " AND ", $sa );
$sql = "SELECT * FROM tabel WHERE " . $srchstr;
Avatar billede s0mmer Nybegynder
14. juli 2008 - 16:46 #4
coderdk > Jeg kan ikke rigtig få det til at virke som jeg vil.. Hvis jeg bruger dit eksempel og f.eks. har følgende i db:

jeg er dk høj

og søger på: jeg er dk

intet resultat. hvad gør jeg galt?
Avatar billede coderdk Praktikant
14. juli 2008 - 17:04 #5
echo lige $sql og se hvad den prøver at søge efter
Avatar billede s0mmer Nybegynder
14. juli 2008 - 19:05 #6
coderdk > jeg beklager, havde overset en fejl. det virker fint nu. men hvorfor mener du det ikke er optimalt? send svar så får du points :)
Avatar billede coderdk Praktikant
14. juli 2008 - 19:38 #7
Det er en dyr søgning, hvis du har mange rækker i databasen ;P Det er rent databaseteknisk...
Avatar billede s0mmer Nybegynder
15. juli 2008 - 16:44 #8
coderdk > spg på falderebet.. ku du forestille sig en bedre måde? hvis der nu findes rigtig mange rækker..
Avatar billede coderdk Praktikant
15. juli 2008 - 21:37 #9
Der er mange måde at løse det på... Man kunne eksperimentere med fulltext indexer, eller manuelt sortere ordene størst først, selecte ind i en temporær tabel ord efter ord, og så slette dem der ikke er fælles... Der er flere løsningsmetoder.
Men så længe at der ikke er super mange rækker, og der ikke er komplekse joins, er den løsning du har, muligvis tilstrækkelig :)
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