PHP/MySQL: mettez en Surbrillance “SONNE COMME” les résultats de la requête
Rapide MYSQL/PHP question. Je suis à l'aide d'un "pas-si-strict" de la requête de recherche comme un secours si aucun résultat n'est trouvé avec une recherche normale de la requête, à hauteur de:
foreach($find_array as $word) {
clauses[] = "(firstname SOUNDS LIKE '$word%' OR lastname SOUNDS LIKE '$word%')";
}
if (!empty($clauses)) $filter='('.implode(' AND ', $clauses).')';
$query = "SELECT * FROM table WHERE $filter";
Maintenant, j'utilise PHP pour mettre en évidence les résultats, comme:
foreach ($find_array as $term_to_highlight){
foreach ($result as $key => $result_string){
$result[$key]=highlight_stuff($result_string, $term_to_highlight);
}
}
Mais cette méthode tombe sur son cul quand je ne sais pas quoi mettre en avant. Est-il possible de savoir ce que le "sound-alike" match lors de l'exécution de cette requête mysql?
C'est-à-dire, si quelqu'un recherche pour "Joan" je tiens à souligner "les de Jean" la place.
peut-être la requête SELECT * from table where $clauses SELECT * from table where $filtre?
Re, oui, désolé à ce sujet. J'ai essayé de simplifier l'un horrible gâchis d'un script que j'ai et qui a glissé en moi.
Re, oui, désolé à ce sujet. J'ai essayé de simplifier l'un horrible gâchis d'un script que j'ai et qui a glissé en moi.
OriginalL'auteur Greg | 2009-11-22
Vous devez vous connecter pour publier un commentaire.
Le SON COMME condition se contente de comparer les SOUNDEX clé de ces deux mots, et vous pouvez utiliser le PHP soundex() pour générer la même clé.
Donc, si vous avez trouvé une ligne correspondante et nécessaire pour trouver le mot en surbrillance, vous pouvez le récupérer à la fois le prénom et le nom, et ensuite utiliser PHP pour trouver celui qui correspond à et de souligner ce mot.
J'ai fait ce code juste pour essayer. (Avait pour tester ma théorie xD)
Plus généralisée de la fonction, de sortir de la correspondance soundex word à partir de l'une des chaînes qui pourrait ressembler à:
Qui, si je suis le comprendre correctement, pourrait être utilisé dans votre déjà posté code:
Ce ne serait pas aussi efficace tho, comme la plus ciblée code dans le premier extrait.
OriginalL'auteur Atli
Noter que
SOUNDS LIKE
ne fonctionne pas comme vous pensez que cela fonctionne. Il n'est pas équivalent àLIKE
dans MySQL, car il ne prend pas en charge la%
générique.Cela signifie que votre requête ne trouverez pas de "John David" lors de la recherche pour "John". Cela peut être acceptable si c'est juste votre secours, mais il n'est pas l'idéal.
Donc, voici une autre suggestion (qui aurait besoin d'amélioration); de la première utilisation de PHPs
soundex()
fonction pour trouver le soundex du mot clé que vous recherchez.Maintenant, vous aurez une liste de firstnames et lastnames qui a une vague ressemblance à tirer la sonnette d' (cela peut être beaucoup d'entrées, vous pouvez augmenter la longueur de la soundex préfixe que vous utilisez pour votre recherche). Ensuite, vous pouvez calculer la distance de Levenshtein entre le soundex de chaque mot et de votre terme de recherche, et de les trier par.
Seconde, vous devriez regarder les requêtes paramétrées dans MySQL, pour éviter les bogues de l'injection SQL.
Oui, sans doute. Alors ma solution est une solution pour un problème qui n'existe pas vraiment... 🙂
OriginalL'auteur Vegard Larsen