Requete Mysql AIDE svp !

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Requete Mysql AIDE svp !

Message le Ven Fév 22, 2008 3:15

Bonjour,

J'ai un annuraire de type pages jaunes. La requete Mysql fonctionne mais est trop précise.

Exemple : Lorsque tape le mot clés "infirmières", il y a 20 réponses.
Avec le mot clé "infirmiers", j'ai 250 réponses.

Comment faire en sorte que lorsque je tape "infirmières", que ca me retourne les 20 réponses mais également les 250 réponses.
En gros, je voudrais que la requete puisse être élargie aux mots qui ressemblent à celui qui a été tapé. (en recherchant "infirmières" que ca me retourne également les réponses correspondant au mot "infirmiers")

Ma requete
$query = "select listid,cid,listname,description,addr,city,state,country,postcode,phone,website ";
$query.="FROM yp_list where (listname like '%$search%' OR description like '%$search%') ";

Merci bcp de votre aide
@+

code
WRInaute passionné
WRInaute passionné
 
Messages: 648
Inscription: Ven Juil 29, 2005 14:25

Message le Ven Fév 22, 2008 6:46

Bonjour,

tout d'abord avant d'envoyer la requete, tu devrais traiter la chaine "$search" pour :
1 - enlever les espaces en début et fin (avec trim($search); )
2 - remplacer tous les accents par les voyelles non accentuées (rien qu'avec ça ta requete renverrait les résultats pour infimieres et infirmiers si tu tapes la recherche "infirmier" :D )

3 - enfin, si tu veux faire une recherche plus globale tu dois :

a) créer un index fulltext sur ta table myslq pour ton champ 'listname'
b) utiliser une requete de ce style à la place de LIKE :
"SELECT listid, cid, description, addr, city, state, country, postcode, phone, website, MATCH (listname) AGAINST ('$search') as score FROM yp_list WHERE MATCH (listname) AGAINST ('$search') OR description like '%$search%' ORDER BY score DESC";


La documentation Mysql à ce sujet : http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Message le Ven Fév 22, 2008 18:28

Bonjour !

Merci beaucoup pour la réponse rapide.

J'ai donc effectué cette requete :
SELECT listid, cid, description, addr, city, state, country, postcode, phone, website, MATCH (listname) AGAINST ( '%infirmieres%' ) as score FROM yp_list WHERE MATCH (listname) AGAINST ( '%infirmieres%' ) OR description like '%infirmieres%' ORDER BY score DESC


MAIS ca me retourne ce message d'erreur : :(
ErrorCan't find FULLTEXT index matching the column list

Et j'ai pourtant fait la requette suivante :
ALTER TABLE `yp_list` ADD INDEX ( `listname` )

Une idée pour résoudre ce pb ?

ET ne faut-il pas altérer également le champ "description". J'aimerai que la recherche soit élargie aussi sur ce champ.

Merci bcp

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Message le Sam Fév 23, 2008 0:16

Re...
J'ai réussi à mettre du fulltext sur le champ "listname" avec phpmyadmin...

Ca marche mais j'ai toujours 20 réponses pour le mots clés "infirmières"

:(

Une idée ??

code
WRInaute passionné
WRInaute passionné
 
Messages: 648
Inscription: Ven Juil 29, 2005 14:25

Message le Sam Fév 23, 2008 7:10

Quid des accents ? Tes tables sont elles en UTF-8 ou en latin 1. Comment sont encodés les accents dans ta table ?

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Message le Sam Fév 23, 2008 13:02

Merci bcp de répondre !

J'ai mis en latin 1.

Et pour les accents, j'avais réglé cela comme cela :

function SansAccents($chaine) {
return( strtr( $chaine,
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",
"AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn" ) );
}
$search = SansAccents($search);


Avant de mettre cette fonction : en tapant "infirmières", j'avais 0 réponses.
Avec ces quelques lignes de codes, j'ai les 20 réponses.

Merci encore

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Message le Sam Fév 23, 2008 14:17

Structure de la table si cela peut aider :
Code: Tout sélectionner
--
-- Structure de la table `yp_list`
--

CREATE TABLE `yp_list` (
  `listid` int(11) NOT NULL auto_increment,
  `cid` int(11) NOT NULL default '0',
  `listname` varchar(255) collate latin1_general_ci NOT NULL,
  `uname` varchar(60) collate latin1_general_ci NOT NULL,
  `description` varchar(255) collate latin1_general_ci NOT NULL,
  `addr` varchar(100) collate latin1_general_ci default NULL,
  `addr2` varchar(100) collate latin1_general_ci default NULL,
  `city` varchar(80) collate latin1_general_ci NOT NULL,
  `state` varchar(50) collate latin1_general_ci default NULL,
  `postcode` varchar(30) collate latin1_general_ci default NULL,
  `country` int(11) NOT NULL default '0',
  `phone` varchar(80) collate latin1_general_ci NOT NULL,
  `tollfree` varchar(100) collate latin1_general_ci default NULL,
  `mobile` varchar(30) collate latin1_general_ci default NULL,
  `fax` varchar(30) collate latin1_general_ci default NULL,
  `email` varchar(200) collate latin1_general_ci default NULL,
  `website` varchar(255) collate latin1_general_ci default NULL,
  `addedon` int(11) NOT NULL default '0',
  `updatedon` int(11) NOT NULL default '0',
  `logo` varchar(40) collate latin1_general_ci default NULL,
  PRIMARY KEY  (`listid`),
  KEY `addedon` (`addedon`),
  KEY `addr` (`addr`),
  KEY `addr2` (`addr2`),
  KEY `cid` (`cid`),
  KEY `city` (`city`),
  KEY `country` (`country`),
  KEY `email` (`email`),
  KEY `fax` (`fax`),
  KEY `listid` (`listid`),
  KEY `logo` (`logo`),
  KEY `mobile` (`mobile`),
  KEY `phone` (`phone`),
  KEY `postcode` (`postcode`),
  KEY `state` (`state`),
  KEY `tollfree` (`tollfree`),
  KEY `uname` (`uname`),
  KEY `updatedon` (`updatedon`),
  KEY `website` (`website`),
  FULLTEXT KEY `listname` (`listname`),
  FULLTEXT KEY `description` (`description`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=46862 ;


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Sam Fév 23, 2008 14:27

Hello,

pour les accents et majuscules / minuscules, MySQL s'en charge déjà tout seul en interne. Si cela ne fonctionnait pas chez toi, c'est que tu avais un soucis d'encodage dans ton code ou dans ta base.

Mais évidement il ne se charge pas des conversions masculin/féminin ni singulier/pluriel... ni même des synonymes.
Tout ça, c'est à toi de le prendre en charge...

steeve971
Nouveau WRInaute
 
Messages: 6
Inscription: Jeu Déc 23, 2004 2:46

Message le Sam Fév 23, 2008 15:44

Bonjour !
Merci pour la réponse...

"Mais évidement il ne se charge pas des conversions masculin/féminin ni singulier/pluriel... ni même des synonymes"

Comment faire donc ??
Par où je dois chercher pour trouver cela (masculin/féminin ni singulier/pluriel)?

Merci de la réponse


Bool
WRInaute accro
WRInaute accro
 
Messages: 1290
Inscription: Jeu Fév 26, 2004 15:59

Message le Sam Fév 23, 2008 16:11

Je ne sais pas si des solutions "toutes prêtes" existent, mais je pense que c'est à toi de développer cela avec tes mimines : un système de conversion féminin => masculin (dans la mesure du possible), et de pluriel => singulier (avec des exceptions ?) ainsi qu'un éventuel dictionnaire de synonymes pour proposer des requêtes "proches".

Pour le dico des synonymes, il doit y avoir quelques dico "libres" : voir coté OpenOffice par exemple, je ne sais pas s'ils le sont.

Pour les conversions, bah c'est du français... parmi les trucs tout bete : supprimer le "S" en fin de mot si le mot n'existent pas dans le dictionnaire tel quel.
Prendre en compte les cas de type "cheval" => "chevaux", et les classiques "hiboux", "choux", etc.

Il faudrait sûrement commencer par rechercher des dictionnaires libres je pense.


Une autre solution plus simple, serait de créer une petite table de correspondance gérées "manuellement".
Et de se baser sur les distances levenshtein des mots pour le reste.

Ou encore de faire un mix de tout ça...


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités