par
moka2203 » 15 déc. 2008, 10:57
Bonjour,
Il existe plusieurs façons pour effectuer une recherche dans une base de données, la plus correcte c'est l'indexation des champs en full text (une icone qui se trouve à droite de chaque champ créer)
et l'utilisation de MATCH... AGAINST(). Sans oublier de définir la table en MyISAM sinon ça ne fonctionne pas ( pas en InnoDB)
Cette fonction MySQL remplace LIKE '%xxxx%' et elle est plus pertinente.
Exemple :
Si tu veux rechercher un mot dans une table, habituellement, tu écris :
SELECT * FROM `table` WHERE __CHAMP__ LIKE '%__MOT__%'
Si tu as 2 mots tu complique encore plus ta requête et tu risque de ne pas avoir de résultat!
Avec MATCH AGAINST(), le probleme est résolu !
Tu écris ceci :
SELECT * FROM `table` WHERE MATCH (titre,body) AGAINST ('_MOTS_RECHERCHES_');
ICI tu recherche _MOTS_RECHERCHES_ dans "table" et qui existe dans les champs titre et body. C'est à dire que les mots peuvent ne pas exister côte à côte, mais le résultat est retourné.
Je pense que c'est la réponse à ta question.
Une autre idée, il faut pensé à créer des champs Tags pour rechercher aussi dans les tags, car il se peut qu'un article parle de quelque chose et que ce mot n'est pas évoqué dans l'enregistrement, tu ne perd pas donc de résultats!
Ce qui te reste à faire c'est de faire des tests avec ta propre table et voir ce que ça donne, n'oublies pas de te documenter encore plus à propos de la fonction MATCH AGAIST de MYSQL
Bonjour,
Il existe plusieurs façons pour effectuer une recherche dans une base de données, la plus correcte c'est l'indexation des champs en full text (une icone qui se trouve à droite de chaque champ créer)
et l'utilisation de MATCH... AGAINST(). Sans oublier de définir la table en MyISAM sinon ça ne fonctionne pas ( pas en InnoDB)
Cette fonction MySQL remplace LIKE '%xxxx%' et elle est plus pertinente.
Exemple :
Si tu veux rechercher un mot dans une table, habituellement, tu écris :
SELECT * FROM `table` WHERE __CHAMP__ LIKE '%__MOT__%'
Si tu as 2 mots tu complique encore plus ta requête et tu risque de ne pas avoir de résultat!
Avec MATCH AGAINST(), le probleme est résolu !
Tu écris ceci :
SELECT * FROM `table` WHERE MATCH (titre,body) AGAINST ('_MOTS_RECHERCHES_');
ICI tu recherche _MOTS_RECHERCHES_ dans "table" et qui existe dans les champs titre et body. C'est à dire que les mots peuvent ne pas exister côte à côte, mais le résultat est retourné.
Je pense que c'est la réponse à ta question.
Une autre idée, il faut pensé à créer des champs Tags pour rechercher aussi dans les tags, car il se peut qu'un article parle de quelque chose et que ce mot n'est pas évoqué dans l'enregistrement, tu ne perd pas donc de résultats!
Ce qui te reste à faire c'est de faire des tests avec ta propre table et voir ce que ça donne, n'oublies pas de te documenter encore plus à propos de la fonction MATCH AGAIST de MYSQL