Avatar billede andreas13_fam Nybegynder
17. januar 2009 - 13:48 Der er 2 kommentarer og
1 løsning

Sorter output efter bedste resultat (sansynligvis)

Jeg har kikket lidt (meget) på hvordan man laver en søgefunktion, mit problem er bare at jeg ikke kan få den til at sortere efter hvad der er mest relevant, er der nogen der kan hjælpe mig med det ?
Jeg har mest kikket på denne side http://www.roscripts.com/PHP_search_engine-119.html

Den kode jeg har, indeholder ingen udskrivning, da det ligger i et andet dokument, i må lige sige hvis i vil have det også.
Min kode som består af PHP og MySQL og den ses her ...




<?php
class Cleaner {
// fjerner ord   
    var $stopwords = array(" hvad ", " hvilke ", " hvordan ", " hvor ", " sådan ", " så ", " er ", " jeg ", " en ", " to ", " laver ", " find ", " finder ", " se ", " så ", " ser ", " jeg ", " dig ");

//fjerner tegn
    var $symbols = array('/','\\','\'','"',',','.','<','>','?',';',':','[',']','{','}','|','=','+','-','_',')','(','*','&','^','%','$','#','@','!','~','`'    );

    function parseString($string) {
        $string = ' '.$string.' ';
        $string = $this->removeStopwords($string);
        $string = $this->removeSymbols($string);
        return $string;
    }
   
    function removeStopwords($string) {
        for ($i = 0; $i < sizeof($this->stopwords); $i++) {
            $string = str_replace($this->stopwords[$i],' ',$string);
        }
       
        //$string = str_replace('  ',' ',$string);
        return trim($string);
    }
   
    function removeSymbols($string) {
        for ($i = 0; $i < sizeof($this->symbols); $i++) {
            $string = str_replace($this->symbols[$i],' ',$string);
        }
           
        return trim($string);
    }
}
//<
    //fordi at det er dansk     
    $stemmed_string = $string;

    //starter Cleaner
    $clean_string = new Cleaner();
    $stemmed_string = $clean_string->parseString($stemmed_string);

    //deler søgetekseten op i et arrya for at fastslå om ordet er på et bokstav
    $split = split(" ",$stemmed_string);
              foreach ($split as $array => $value) {
              if (strlen($value) < 1) {
              continue;
              }
              $new_string .= ''.$value.' ';
              }
    $new_string=substr($new_string,0,(strLen($new_string)-1));

    //deler søgetekseten op i et arrya
    $split_stemmed = split(" ",$new_string);

//Starten MySQL eftersprøgelsen       
$sql = "SELECT DISTINCT COUNT(*) As occurrences, navn, tekst, ingredienser, id, hm, raiding, stemmer, oprindelse, dato FROM kogebogen WHERE (";
           
    while(list($key,$val)=each($split_stemmed))
    {
      if($val<>" " and strlen($val) > 0)
      {
        $sql .= "(navn LIKE '%$val%' OR tekst LIKE '%$val%' OR ingredienser LIKE '%$val%') OR ";
    }
    }
  $sql=substr($sql,0,(strLen($sql)-4)); //fjerne det sidste OR
  $sql .= ") GROUP BY id ORDER BY occurrences DESC"; //insætter slutningen af MySQL eftersprøgelsen
?>
Avatar billede gnoname Praktikant
17. januar 2009 - 16:23 #1
Umiddelbart vil jeg sige erstat "order by occurenbces" med "order by dato desc" men det er kun et skud da jeg ikke kender din datamodel.
Avatar billede andreas13_fam Nybegynder
17. januar 2009 - 18:31 #2
Ja men datoen i midt tilfælde er ligegyldigt.
Min MySQL database består af
|id||navn||tekst||ingredienser||hm||billede||raiding||stemmer||ip-adresse||oprindelse||dato||opretter|

Ifølge den hjemmeside jeg har set skulle det væremuligt at tælle hvor mange gange ønsket går i opfyldelse pr. række og derved sortere efter det.
Jeg ved heller ikke helt hvad ORDER BY occurrences DESC vil sige. Da jeg i den grad er nybegynder i PHP og MySQL.
Det var derfor meningen at jeg skulle lære noget og i sammentid lave en kogebog - http://www.a-mweb.dk/Portal/WWW_Kogebogen.php
Avatar billede andreas13_fam Nybegynder
18. januar 2009 - 19:11 #3
Fandt den sidste kodestump
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