Utilisation de la recherche en texte intégral MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier])
chose.
Disons que votre table est articles
et vous devez trouver des publications connexes sur un titre de publication actuelle. Faites comme ceci :
SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score
FROM articles
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle')
ORDER BY score DESC LIMIT 5
Cela vous donnera les 5 meilleurs messages liés.
Mais n'oubliez pas d'activer la recherche en texte intégral pour les colonnes de cette table, en exécutant cette requête :
ALTER TABLE articles ADD FULLTEXT (title, body);
[EDIT] :pourquoi ne pas utiliser LIKE
: Clarification à l'OP :
Parce que cela ne donnera pas de résultats corrects. Disons que votre titre actuel est "Musique de 1980" et que vous voulez des articles connexes à ce sujet. Maintenant, si vous utilisez LIKE
alors seuls les messages contenant EXACTEMENT la séquence de mots "Musique de 1980" apparaîtront. Cependant, si vous utilisez MATCH ... AGAINST
, les publications contenant Musique OU 1980 apparaîtront. De plus, les messages qui contiennent à la fois Musique et 1980 apparaîtront en haut car cela donne un SCORE
à chaque résultat et nous trions selon ce score. J'espère que c'est clair.
[MODIFIER] :2 :
Si vous avez des catégories, vous pouvez ajouter AND Category = '$CurrentCategory'
dans la requête SQL where clause
pour obtenir des résultats plus spécifiques.
[EDIT] :3 :OP ne peut pas utiliser le texte intégral :
Si vous ne pouvez pas utiliser le texte intégral (pour une raison quelconque), vous pouvez simplement afficher 5 messages aléatoires de la même catégorie. Comme ils sont dans la même catégorie, ils sont en quelque sorte liés au moins :
SELECT *
FROM articles
WHERE Category = '$CurrentCategory'
LIMIT 5
Syntaxe modifiée :modification de LIMTI en LIMIT dans le code MySQL