Americas Posté 20 Octobre 2006 Posté 20 Octobre 2006 J'ai une table avec un champ "nom" et un champ "description" Pour faire une recherche sur le champ "nom" pas de problèmes vu le nombre réduit de mots. Par contre le champ "description" est plus étendu et comporte souvent plus de 500 caractères... et je n'arrive pas à isoler un mot précis dans cette description lors de mes requêtes. Exemple : $sql = "SELECT * FROM table WHERE (nom = '$motsclef' or description LIKE '%$motsclef%') GROUP BY description"; En faisant une recherche avec le mot "italie"... pas de soucis. Mais si je fais une recherche avec le mot "rome"... il va me ressortir toutes les occurences contenant la chaîne "rome" tels que aérodrome ou romeo et m'afficher des résultats qui ne seront pas en rapport avec la requête souhaitée. j'ai essayé de retirer les % ... mais aucun résultat probant
Vincent Posté 20 Octobre 2006 Posté 20 Octobre 2006 Si tu veux un mot d'une description, essaye en partant du principe qu'il y a un espace avant. $sql = "SELECT * FROM table WHERE (nom = '$motsclef' or description LIKE '% $motsclef%') GROUP BY description"; Mais a quoi sert donc le group by sur le champs description? bizarre comme pratique
Americas Posté 20 Octobre 2006 Auteur Posté 20 Octobre 2006 Le Group By description me sert à éliminer les produits identiques car seuls les tarifs sont différents pour une description commune. Bon... pour l'espace après le % c'est bon... on élimine aérodrome... reste le problème de romeo... sachant qu'avec un espace avant le deuxieme % on ignore rome, rome; ou rome.
Bourinho Posté 20 Octobre 2006 Posté 20 Octobre 2006 Salut, et un truc du genre : $sql = 'SELECT * FROM table WHERE (nom = \''.$motsclef.'\' or description REGEXP \''.$motsclef.'[^a-zA-Z]\') GROUP BY description'; Ca ne te conviendrait pas par hasard?
Americas Posté 20 Octobre 2006 Auteur Posté 20 Octobre 2006 J'ai essayé ton code Bourinho mais j'ai pas l'affichage des produits... il ne fait que les compter.
Bourinho Posté 20 Octobre 2006 Posté 20 Octobre 2006 Salut... c'est curieux comme résultat... Qu'est ce que tu écris dans la suite de ton code pour obtenir l'affichage des résultats? Sinon, la requête me semblera plus correcte avec : $sql = 'SELECT * FROM table WHERE nom = \''.$motsclef.'\' OR description REGEXP \''.$motsclef.'[^a-zA-Z]+\' GROUP BY description'; Si dans PhpMyAdmin, tu fais la requête suivante, qu'obtiens tu? SELECT * FROM table WHERE nom = 'rome' OR description REGEXP 'rome[^a-zA-Z]+' GROUP BY description
appollo Posté 20 Octobre 2006 Posté 20 Octobre 2006 "SELECT * FROM Matable WHERE lechamp1 LIKE '%le_mot_ke_je_cherche%' Pourquoi pas tous simplement ca ?
Dan Posté 21 Octobre 2006 Posté 21 Octobre 2006 Pour déterminer les limites d'un mot, il faut utiliser [[:<:]] et [[:>:]] avec REGEXP, comme ceci: SELECT *FROM table WHERE nom = 'rome' OR description '[[:<:]]rome[[:>:]]'GROUP BY description
Americas Posté 22 Octobre 2006 Auteur Posté 22 Octobre 2006 SELECT *FROM table WHERE nom = 'rome' OR description REGEXP '[[:<:]]rome[[:>:]]'GROUP BY description Ok... pour un mot précis comme rome ça fonctionne... mais le mot est une variable du type $marecherche et si je remplace '[[:<:]]rome[[:>:]]' par '[[:<:]]$marecherche[[:>:]]' le script ne fonctionne plus... j'ai une page blanche
Dan Posté 22 Octobre 2006 Posté 22 Octobre 2006 Il faut vraiment te mâcher le boulot $query="SELECT * FROM table WHERE nom = '".$marecherche."' OR description REGEXP '[[:<:]]".$marecherche."[[:>:]]' GROUP BY description"; suivi de mysql_query($query[, $link]); bien sûr :!: Dan
Americas Posté 22 Octobre 2006 Auteur Posté 22 Octobre 2006 Merci Dan, ça fonctionne super ! J'avais seulement oublié les guillemets et le petit point. Bon... on m'a jamais appris à coder moi
Romeof Posté 13 Janvier 2009 Posté 13 Janvier 2009 Merci dan pour la solution. Mais j'ai un autre pb. les informations ne s'affichent pas tous le programme affiche une ligne et saute une voici mon code $id = $_GET['id'];if ($id = 'm'){ $mal = $_POST['nom']; $req = $query="SELECT * FROM mutation where mal_nom_fr REGEXP '[[:<:]]".$mal."[[:>:]]' OR mal_nom_eng REGEXP '[[:<:]]".$mal."[[:>:]]'"; ; $res = executeRequete($req); $num = mysql_num_rows($res); if ($num = 0) { header("Location:mutation.php"); echo "alert('Disease not exist')"; } else{ echo $mal.'<br><div><table border="1">'; while($resultat = mysql_fetch_array($res)) { echo " <tr> <td>".$resultat['gene']."</td> <td onClick='document.location.href=".$res['lien'].">".$resultat['omim']."</td> </tr> "; } echo '</table></div>'; }}
captain_torche Posté 13 Janvier 2009 Posté 13 Janvier 2009 Il va falloir commencer par doubler tes signe égal dans tes conditions. N'oublie pas qu'un seul signe égal signifie "affecter une valeur". Quand tu fais : if ($id = 'm'), tu affectes la valeur 'm' à ta variable $id (et ta condition est toujours vraie, quelle que soit la valeur qu'aurait pu avoir $id avant). Il faut que tu fasses if($id == 'm')
Romeof Posté 13 Janvier 2009 Posté 13 Janvier 2009 merci. mais le pb persiste encore il m'affiche une ligne et saute une et ainsi de suite merci . mais le pb persiste encore il m'affiche une ligne et saute une et ainsi de suite
Romeof Posté 13 Janvier 2009 Posté 13 Janvier 2009 je viens de touver la faute merci en avance pour tous. c'était tres gentil de votre part.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant