Page 1 sur 1

Moteur de recherche full text PHP/MySQL

Posté : 25 mai 2005, 11:46
par dmx-moteur
Bonjour,

Je cherche à faire via Dreamweaver un moteur de recherche pour mon site en utilisant PHP/MySQL. Je souhaite utiliser la méthode proposée dans ce tutorial moteur de recherche pour Dreamweaver/ASP/Access.

Mon problème est que ne sais pas faire dans MySQL l'équivalent d'une "table" de requête ACCESS. Je souhaite en fait concatener divers champs de diverses tables pour permettre la recherche...

Merci à tous ceux qui pourrait me donner une info la dessus.

Posté : 25 mai 2005, 15:47
par pjl
La doc officielle de MySQL pour la recherche full-text.
Tout y est expliqué : conception de la table et requête à construire.

http://dev.mysql.com/doc/mysql/fr/fulltext-search.html

PS : je te déconseille d'utiliser Dreamweaver pour ce genre de boulot.

Moteur de recherche full text PHP/MySQL

Posté : 25 mai 2005, 16:37
par dmx-moteur
Merci de cette réponse. En fait je code "à la main" pour les interfaces de recherche...
Je suis allé voir. Cela correspond à ce que je souhaite faire mais là où ça se complique un peu c'est que je veux une recherche multicritères dans différents champs. Je dois donc concatener plusieurs champs. Puis mettre les différents mots dans un tableau via explode(). Voici mon code de la page de résultats pour tester la concatenation (Interface page précédente avec liste déroulantes non liées) :
// Pour rechercher sur l'option "tous"
$VARfonction = $_POST['VARfonction'];
$VARregion = $_POST['VARregion'];
$VARtype_offre = $_POST['VARtype_offre'];
 if ($VARfonction == "fczz") $VARfonction="fc%";
 if ($VARregion == "rezz") $VARregion="re%";
 if ($VARtype_offre == "tyzz")  $VARtype_offre="ty%";
$recherche = $_POST['recherche'];

mysql_select_db($database_mabase, $mabase);
$query_Recordset1 = "SELECT * FROM annonces WHERE CONCAT(INTITULE, DESCRIPTIF, NOM) LIKE '$recherche' AND (offres.CODE_FONC LIKE '$VARfonction') AND (offres.CODE_REG LIKE '$VARregion') AND (offres.CODE_TYP LIKE '$VARtype_offre')";
$Recordset1 = mysql_query($query_Recordset1, $emploi) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
Sur la page de recherche, le formulaire comporte 4 éléments de formulaire :

Code : Tout sélectionner

<fieldset> <br> <label>Mots cl&eacute;s :</label> <input name="recherche" type="text" class="input" id="recherche" size="30"><br><br> <label>Fonctionnalités :</label> <select name="VARfonction" class="select" id="VARfonction"> <option value="fc" selected>Toutes les Fonctionnalités</option> <?php //code de la liste ?> </select><br><br> <label>Région : </label> <select name="VARregion" class="select" id="VARregion"> <option value="re" selected>Toutes les régions</option> <?php //code de la liste ?> </select><br><br> <label>Type :</label> <select name="VARtype_offre" class="select" id="VARtype_offre"> <option value="ty" selected>Tous</option> <option value="ty01">Offres</option> <option value="ty02">Demandes</option> </select>
Le problème c'est que, bien que je n'ai pas d'erreur sur la page, aucune recherche ne fonctionne.

Posté : 25 mai 2005, 16:54
par Cyrano
C'est surprenant: le seul point que je pourrais reprocher au code, c'est une concaténation mal faite pour la requête qui devrait être:
$query_Recordset1 = "SELECT * FROM annonces WHERE CONCAT(INTITULE, DESCRIPTIF, NOM) LIKE '". $recherche ."' AND offres.CODE_FONC LIKE '". $VARfonction ."' AND offres.CODE_REG LIKE '". $VARregion ."' AND offres.CODE_TYP LIKE '". $VARtype_offre ."'";
J'ai également enlevé des parenthèses qui n'ont pas lieu d'être à priori.

Question: si tu mes précisément les caractéristiques d'un article qui est dans la base, il ne sort pas du tout ?

Posté : 25 mai 2005, 18:18
par pjl
je ne vois pas pourquoi tu dois concaténer pour faire une recherche sur plusieurs champs.

de mon coté, ca marche très bien avec MATCH sur 4 champs en même temps.

Posté : 25 mai 2005, 18:52
par Cyrano
Je vais me coucher plus savant ce soir, je ne connaissais pas la technique MATCH / AGAINST :oops:

Posté : 25 mai 2005, 19:25
par pjl
Ou commet faire un méga moteur de recherche en 2s. 8)

Posté : 26 mai 2005, 14:12
par dmx-moteur
Merci à tous de vos réponse. La solution MATCH ... AGAINST est tout à fait ça... Il me reste cependant un petit problème à gérer :

Code : Tout sélectionner

SELECT DATE, INTITULE, CODE_REG FROM offres WHERE MATCH(INTITULE, DESCRIPTIF, NOM) AGAINST ('voiture') AND (CODE_FONC LIKE 'fc12') AND (CODE_REG LIKE 're01') AND (CODE_TYP LIKE 'ty01');
fonctionne parfaitement lors du test dans Mysql.

Mais dans la page PHP :

Code : Tout sélectionner

SELECT DATE, INTITULE, CODE_REG FROM offres WHERE MATCH(INTITULE, DESCRIPTIF, NOM) AGAINST ('$recherche') AND (offres.CODE_FONC LIKE '$VARfonction') AND (offres.CODE_REG LIKE '$VARregion') AND (offres.CODE_TYP LIKE '$VARtype_offre');
ne fonctionne pas : aucun résultat à la requete quelque soit la recherche...

Posté : 26 mai 2005, 17:04
par Invité
La solution a été trouvée : problème lors de la valeur par défaut "Tous" dans la page de recherche : fc par ex. au mieu de fczz !

Je continue cependant sur mon pb : il me faut maintenant gérer le problème des accents...

Posté : 27 mai 2005, 12:15
par dmx-moteur
Je donne rendez-vous à ceux qui sont interessé par ce problème et la recherche full text dans le forum "débuter en PHP" avec mon code final et la solution encore partielle de ce moteur de recherche