login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoeken in een database met ranking (Opgelost)

Offline Martijn2008 - 20/02/2011 14:26 (laatste wijziging 20/02/2011 14:32)
Avatar van Martijn2008PHP beginner Hallo allemaal,

Hoe er door middel van een query in de database gezocht dient te worden zullen de meeste hier op Sima inmiddels wel weten. Ik ben nieuwsgierig hoe ik een ranking op de zoekresultaten uit de database toe pas. Welk resultaat uit de database matched het best met de zoekterm? Ik denk aan het volgende:

- 99,3% : Resultaat 1
- 84,6% : Resultaat 2
- 53,5% : Resultaat 3

Kan iemand misschien uitleggen hoe ik dit realiseer ?

Dank alvast!

Martijn

5 antwoorden

Gesponsorde links
Offline ArieMedia - 20/02/2011 15:09
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
PHP.net: levenshtein kon dat mee volgensmij
Offline lolll - 20/02/2011 15:23
Avatar van lolll Lid Je haalt eerst je totaal aantal resultaten uit je db op. Dan ga je d.m.v een loopje controleren waar en hoeveel keer een bepaald resultaat erin zit. Die hoeveelheid koppel je aan je resultaat in een array bv. Het resultaat waarin de zoekterm het meeste voorkomt zet je eerst, dan het tweede,... ook met een loopje. Voor de procent deel je bij elk resultaat de hoeveelheid door de grootste hoeveelheid en dat doe je maal honderd.
Bv:
  1. $zoekwoord=$_POST['zoekwoord'];
  2. $resultsarray;
  3. $query="SELECT zoekveld FROM zoekdb";
  4. $query_result=mysql_query($select);
  5. $i=0;
  6. while($results=mysql_fetch_array($query_result)){
  7. if(substr_count($results['zoekveld'],$zoekwoord)>0){
  8. $i++;
  9. $resultsarray['resultaat' . $i]=$results['zoekveld'];
  10. $resultsarray['woorden' . $i]=substr_count($results['zoekveld'],$zoekwoord);
  11. }
  12. for($i=0;$resultsarray['resultaat' . $i];$i++){
  13. echo $zoekwoord . " werd " . $resultarray['woorden' . $i] . " keer gevonden in " . $resultarray['resultaat' . $i]
  14. }
  15. }
Bedankt door: Martijn2008
Offline Martijn2008 - 20/02/2011 15:28 (laatste wijziging 20/02/2011 18:03)
Avatar van Martijn2008 PHP beginner Klinkt logisch, maar als je matched op vijf velden lijkt deze methode me wat omslachtig. Zou het niet simpeler kunnen in (My)SQL zelf bijvoorbeeld?

Methode substr_count() matched exact het woord. Stel dat er in de tabel ergens "product" staat en ik zoek op "Product", dan ontdekt deze methode het woord niet. Ik heb een methode nodig die ongeveer gelijk is aan LIKE in SQL.
Offline lolll - 20/02/2011 18:52
Avatar van lolll Lid Je kan ook dit gebruiken:
  1. if(substr_count(strtolower($results['zoekveld']),$zoekwoord)){
  2. //...
  3. $resultsarray['woorden' . $i]=substr_count(strtolower($results['zoekveld']),$zoekwoord);
  4. }


Dan vind hij ook Product als je op product zoekt.
Offline GJ2086 - 20/02/2011 20:20 (laatste wijziging 20/02/2011 20:47)
Avatar van GJ2086 Nieuw lid Behalve de levenshtein functie, heb je ook nog de similar_text() functie binnen php. Deze functie geeft als derde parameter de "match percentage" in procenten terug.

Je kan dit ook oplossen met een stored procedure zie levenshtein-distance-as-a-mysql-stored-function
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.181s