Avatar billede flushout Nybegynder
19. februar 2004 - 00:05 Der er 2 kommentarer og
1 løsning

Søgning i MySQL, spørgsmål vedr. REGEXP

Jeg har en søgemaskine, som bruges til at søge i en MySQL database. Det den skal kunne er, at modtage et eller flere ord og så søge i to forskellige tabeller. Desuden skal den kunne returnere et svar selvom det søgte kun er en del af et ord. Søges der f.eks. på "bord" skal søgningen returnere alle ord hvor bord indgår, eks: pakkebord, skrivebord, bordskåner osv. Den version jeg viser herunder kan ikke det, den søger kun på ordet bord og ikke på ord hvori bord indgår. Mit spørgsmål går på om "REGEXP" kan bruges istedet for "LIKE" og om det vil returnere det ønskede. Jeg vil også meget gerne vide, om jeg kan gøre det her smartere end jeg gør det da jeg har på fornemmelsen at min metode er lidt "sløv"..

<?PHP

    //get the search string from the post
    $search_string = $_POST['search_string'];
   
    //divide the search string into tokens
    $words = explode(" ", $search_string);
       
// ********* Søgning i Tabellen Produkter *************

    $query = "SELECT prod_id, prod_name, prod_form_price, prod_new_price, nrofpic FROM prods WHERE (";
    $first=true;

    foreach($words as $word){
        if(!$first){
            $query =$query."OR ";
        } else{
            $first=false;
        }
        $query = $query."prod_desc LIKE '%$word%' OR prod_name LIKE '%$word%'";
    }
   
    $query= $query.");";

    $results = mysql_query($query,$db) or die("Databasefejl ved søgning!");

// ********* Søgning i Tabellen Kategorier *************

    $queryCat = "SELECT cat_id, cat_name FROM cats WHERE (";
    $first=true;

    foreach($words as $word){
        if(!$first){
            $queryCat =$queryCat."OR ";
        } else{
            $first=false;
        }
        $queryCat = $queryCat."cat_name LIKE '%$word%'";
    }
   
    $queryCat= $queryCat.");";

    $resultsCat = mysql_query($queryCat,$db) or die("Databasefejl ved søgning!");

?>
Avatar billede arne_v Ekspert
19. februar 2004 - 07:14 #1
LIKE '%bord%'

bør matche både skrivebord og bordskåner, så jeg tror at der er noget andet galt.
Avatar billede flushout Nybegynder
01. marts 2004 - 20:20 #2
Jeg har fået løst problemet.. Det lå slet ikke i denne kode, men i databasen :P

Hvis du smider et svar får du nogle point :)
Avatar billede arne_v Ekspert
01. marts 2004 - 22:48 #3
ok
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
Computerworld tilbyder specialiserede kurser i database-management

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