2011-07-18 1 views
3

Je suis un développeur/concepteur pour un site Web axé sur la collectivité: http://www.thegamesdb.netComment améliorer la recherche de titre du site résultats

Le problème que nous avons est tout droit vers l'avant:

Pac-Man est un jeu sur le site. Une personne devrait être capable de chercher "pacman" ou "pac man" et le résultat "Pac-Man" devrait être affiché. Actuellement, cela n'arrive pas.

extrait de code de recherche est ci-dessous, mais le code complet peut être vu à: http://code.google.com/p/thegamesdb/source/browse/trunk/tab_listseries.php

if ($function == 'Search') 
{ 
    $query = "SELECT g.*, p.name FROM games as g, platforms as p WHERE GameTitle LIKE '%$string%' and g.Platform = p.id"; 
    if(!empty($sortBy)) 
    { 
    $query .= " ORDER BY $sortBy, GameTitle ASC"; 
    } 
    else 
    { 
    $query .= " ORDER BY GameTitle"; 
    } 
} 

Je ne suis pas familier avec les techniques de codage de recherche, de sorte que toute aide serait appréciée ... J'ai essayé chercher sur le net et tout ce que j'ai trouvé est quelques moteurs de recherche de site préfabriqués. Nous ne voulons pas vraiment descendre cette route ... c'est un peu exagéré pour nos besoins.

Dans l'attente de discussion,

Alex

Répondre

1

MySQL dispose d'une fonction de comparaison de chaînes appelée SOUNDS LIKE. Cela peut être un bon cas d'utilisation pour cela.

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#operator_sounds-like

Vous modifieraient probablement comme ceci:

SELECT * FROM blah WHERE SOUNDEX(column) LIKE CONCAT('%', SOUNDEX($search_string), '%') 
+0

SOUNDEX supprime essentiellement les espaces, les voyelles, et en double lettres qui sont à côté de l'autre. – dqhendricks

+0

Merci pour cela, c'est une solution parfaite et légère à notre problème et fonctionnera bien pour l'instant :) Après avoir lu le post de Randy j'ai eu un jeu avec la fonction mysql de Metaphone Double Atomboys .... mais il a juste causé mon serveur de dev s'écraser. Il s'agit d'une solution agréable et sans souci qui correspond à notre code existant. – flexage

+0

@flexage content je pourrais aider! – dqhendricks

0

en fin de compte, vous devrez décider comment effectuer une correspondance floue. Pour votre exemple, vous pouvez supprimer tous les espaces et tous les caractères '-', puis exécuter le like '%$string%' match. vous pouvez également considérer UPPER sur les deux côtés de ce LIKE.

vous pouvez faire plus ou moins de votre propre façon de déterminer le flou.

Questions connexes