8791 sujets

Développement web côté serveur, CMS

Bonjour

J'ai découvert la fonction match,mais le problème c'est que si un mot est présent trop souvent il ne le trouve pas.

Au début en créant ma table j'ai mis un FULLTEXT (titre,texte)
et aprés j'ai mis


SELECT * FROM matable
    ->          WHERE MATCH (titre,texte) AGAINST ('motrecherché');


Comment remedier à cela??

Merci d'avance pour votre aide.
Administrateur
Quelques remarques qui peuvent servir :
- les mots de moins de 3 caractères sont ignorés en fulltext (cela peut être modifié dans la conf ft_min_word_len=3)
- match against retourne une valeur numérique (pertinence du résultat) donc il se peut que l'utilisation faite dans ta requête ne soit pas des plus optimales, on peut également s'en servir ainsi :
SELECT id,MATCH (titre,texte) AGAINST ('motrecherché') FROM tatable;


http://dev.mysql.com/doc/refman/5.0/fr/fulltext-search.html
ok ben je vais utiliser match alors
mais le problème c'est que je ne sais pas comment l'integrer dans mes pages
car quand je recupère le champs texte de mon formulaire j'utilise la fonction implode
donc je faisais mon select dans IN mais comment faire avec MATCH ?pour que si dans le champs de texte du formulaire 2 ou 3 mots sont tapés ça fonctionne
merci d'avance pour votre aide

Formulaire:

<body> 
<div id="Layer2"> 
<form id="form1" name="form1" method="get" action="integrationmotcleetlienmatch.php"> 
<table width="527" height="160" border="0" cellpadding="0"> 
<tr> 
<td width="144"><input name="mot" type="text" id="mot"></td> 
<td width="186"><div align="center"> 
<div align="right"> 
<select name="quoi" id="quoi"> 
<option value="avion">marre</option> 
<option value="voiture">voiture</option> 
</select> 
</div> 
</div></td> 
<td width="189"><div align="center"> 
<select name="endroit" id="endroit"> 
<option>touslesdépartements</option> 
<option value="13009">13009</option> 
</select> 
</div></td> 
</tr> 

<tr> 
<td height="58" colspan="3"><div align="center"> 
<input type="submit" name="Submit" value="rechercher" /> 
</div></td> 
</tr> 
</table> 
</form> 
</div> 
</body> 



et ma 2 ème page:

<?php 
$liendb = mysql_connect("serveur","user","pass"); 
mysql_select_db ("nombase"); 

function protection(&$value) { 
$value = (get_magic_quotes_gpc())? mysql_real_escape_string(stripslashes(trim($value))) : mysql_real_escape_string(trim($value)); 
return $value; 
} 


$quoi = !empty($_GET['quoi'])? protection($_GET['quoi']) : ''; 
$endroit = !empty($_GET['endroit'])? protection($_GET['endroit']) : ''; 




$sql= "SELECT texte,titre,prix,id FROM annonce1 WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'"; 
if (empty($_GET['mot']) === FALSE) { 

$tab = explode(' ', $_GET['mot']); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sql .= " AND MATCH (titre,texte,prix) AGAINST  ('$IN')"; 
} 
$resultat_sql = mysql_query($sql) or die (mysql_error()); 
$essai= mysql_fetch_array($resultat_sql);
if (empty ($essai))
die ("Il n'y a aucun résultat pour votre requète");
else 

$nombreDeMessagesParPage = 2; 
$n =mysql_num_rows($resultat_sql); 
$nombresDePages =ceil($n/$nombreDeMessagesParPage ); 
echo 'Page : '; 
for ($i = 1 ; $i <= $nombresDePages ; $i++) 
{ 
echo '<a href="integrationmotcleetlienmatch.php?page='.$i.'&quoi='.$quoi.'&endroit='.$endroit.'&mot='.$mot.'">'. $i .'</a> '; 
} 


if (isset($_GET['page'])) 
{ 
$page = $_GET['page']; } 
else 
{ 
$page = 1; } 


$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage; 
$sqll= "SELECT texte,titre,prix,id FROM annonce1 WHERE categorie = '" . $quoi . "' AND departement = '" . $endroit . "'"; 
if (empty($mot) === FALSE) { 
$tab = explode(' ', $mot); 
array_walk($tab, 'protection'); 
$IN = implode("','", $tab); 
$sqll .= " AND MATCH (titre,texte,prix) AGAINST ('$IN')";  
} 
$sqll .= " ORDER BY id DESC LIMIT " . $premierMessageAafficher . ", " . $nombreDeMessagesParPage; 
$resultatt_sql = mysql_query($sqll) or die (mysql_error());  
?> 

 
<table style="border:1px solid black; width:100%"> 
<?php

 while ($resultat = mysql_fetch_assoc($resultatt_sql)) 
{ ?> 
<tr> 
<td><a href="description5bis.php?<?php echo 'id='.intval($resultat['id']) ?>"><?php echo htmlentities($resultat['titre'])?></a></td> 
</tr> 
<?php } 

mysql_free_result($resultatt_sql); 

mysql_close($liendb); 
?>
Bonjour
En fin de compte j'ai enlevé le IMPLODE et ça marche!!!
Mais la je voudrais changer la taille des caractères minimaux
j'ai donc tapé:
ft_min_word_len=2 comme le dit la doc
mais j'ai une erreur de syntaxe
Comment changer ce paramètre ?(je suis chez free est ce que ça change quelquechose)
Merci pour votre aide.