Aller au contenu

Rechercher dans MySql


Neoboot

Sujets conseillés

Salut tout le monde,

Si on recherche l'occurence d'un mot dans une base de donnée la solution la plus simple serait :

$req = "SELECT * FROM table WHERE col1 LIKE '%$mot%'";

donc si $mot = test les résultats qui serait extraite serai dans le genre :

  • test
  • tests
  • testament
  • ...

Et pour chercher un mot unique ?

Lien vers le commentaire
Partager sur d’autres sites

le % est un joker.

Pour trouver le mot test, il faut mettre LIKE '$mot'";

Mais assures toi de la casse : majuscules/minuscules.

Mais si tu cherches le mot juste, tu peux aussi te servir du signe =

SELECT * FROM table WHERE col1 = '$mot'

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Bah lol, doit y avoir un phantome alors, car j'ai utilisez deja ta solution et je n'est eu aucun resultat ou alors il me dit que la colonne WEB n'existe pas ( si je fait une recherche sur WEB ).

Pourtant la casse est respsecter...

Comprend plus rien la....

Lien vers le commentaire
Partager sur d’autres sites

J'ai suivi tes consignes et est refait le code sans les fonctions ;)

	$lk = mysql_connect($db_server,$db_user_login,$db_user_pass) or die("Impossible de se connecter");
$sql = mysql_db_query($db_name,"SELECT * FROM neo_sites WHERE description like '$search'",$lk) or die("Imosssible d'effectuer le query");
echo "<br>lk =".$lk;
echo "<br>sql =".$sql;
echo "<br>debut du while<br>";
while($site = mysql_fetch_array($sql)) {

 echo "".$site["description"]."<br><br>";
            }
echo "<br>fin du while";

mysql_close($lk);

et en résultat pour le mot "web" j'ai

lk =Resource id #4
sql =Resource id #5
debut du while

fin du while

La recherche est effectuer sur des colonnes de type BLOB et j'ai essayer sur ovh...

Lien vers le commentaire
Partager sur d’autres sites

Hmm, il faut peut-être vérifier si ton résultat n'est pas "normal"

la requête SELECT ... WHERE description like 'web' ne renvoie d'enregistrement que si ta colonne description contient "WEB" ou "web". Mais pas si elle contient "webmaster" ou "WEB "...

essaie donc aussi SELECT ... WHERE TRIM(description) like 'web'

Lien vers le commentaire
Partager sur d’autres sites

:huh: Attention,

WHERE col='web'

et

WHERE col LIKE '%web%'

sont très différent.

Le premier ne donnera un résultat que si web est l'unique mot de la colonne col alors que le second code donnera un résultat dès que le mot web sera présent dans une expression contenant le mot web dans la colonne col.

Que cherche-tu exactement ? Le mot web seul ou le mot web dans une phrase ?

:blush: Je vais regarder ton mail dès que possible.

Lien vers le commentaire
Partager sur d’autres sites

mon mail ?  :unsure:

Non je confonds avec smile :shutup:

Il faut que tu utilises LIKE pour trouver un mot dans une phrase... Mais le problème comme tu le soulignes dans ton premier post c'est que %web% va faire resortir également les mots contenant web (webmaster par exemple). Une solution pourrait être de chercher % web % mais dans ce cas tu ne trouveras pas web en début ou en fin de phrase, ni "web.", "web,", "web!", etc..

Je n'ai personnellement pas trouvé de solution pour réellement trouver un mot dans une phrase...

Lien vers le commentaire
Partager sur d’autres sites

Bon suis pas comme sa :twisted:

$sql = "SELECT url, description FROM neo_sites WHERE description REGEXP '$search'";

Merci a Nexen

Et vous tous pour votre aide ;)

Si quelqu'un a des commentaires ?

Modifié par Neoboot
Lien vers le commentaire
Partager sur d’autres sites

T'es sur que cela suffit ce que tu indiques ?

mysql> SELECT "a word a" REGEXP "[[:<:]]word[[:>:]]";  -> 1
mysql> SELECT "a xword a" REGEXP "[[:<:]]word[[:>:]]";     -> 0

J'ai déjà utilisé les expressions régulières dans une requête mais je ne suis pas arrivé à ce que je voulais, à savoir chercher à la fois les mots au singulier et au pluriel lorsqu'ils sont saisies au singulier dans le moteur...

Lien vers le commentaire
Partager sur d’autres sites

ha oui utiisé les expressions régulières dans les requettes pas mal :)

j'en apprend tous les jours ici, j'adore :)

exabs, dac pour le mail, tu me donneras une réponse :)

Modifié par smile
Lien vers le commentaire
Partager sur d’autres sites

enfaite me suis trompé, j'ai pas donné le bon code :evil:

	$sql = "SELECT url, description FROM neo_sites WHERE description REGEXP '$search([^a-zA-Z0-9])'";

donc si dans la desscription il y a :

"salut les amis <<lemuriens>>."

et que tu fait une recherche sur "lemuriens" il te trouve "lemuriens" cool ;)

C'est se qui me fallait.

Pour la recherche au singulier ou au pluriel je sais pas encore mais je vais me pencher dessus et je vous tien au courant ^_^

Modifié par Neoboot
Lien vers le commentaire
Partager sur d’autres sites

Ben non,

Je viens de fair un test avec :

-$search = Ven

-"description" = Vendez votre site

J'ai 0 resultat pour Ven, ven...

J'ai 0 résultat vendez

J'ai 1 resultat pour Vendez

^_^

Modifié par Neoboot
Lien vers le commentaire
Partager sur d’autres sites

Pour ce qui est après le mot à chercher je suis d'accord mais pour ce qui se trouve avant ? "rien" -> "lémurien"

Lien vers le commentaire
Partager sur d’autres sites

Pourrais tu donner le type de colonnes, s'il te plait ? (varchar, text, blob, ...)

le probleme n'est pas le meme si c'est l'un ou l'autre.

Ainsi, si la colonne est blob, elle est sensible à la casse ('vendez' est différent de 'Vendez'), que ce soit avec LIKE ou avec REGEXP.

Avec REGEXP et varchar

insensible à la casse

trouve le mot si tu n'en mets qu'une partie

Avec REGEXP et BLOB :

sensible à la casse,

mais trouve la chaine dans une phrase

Avec LIKE et varchar

insensible à la casse

ne trouve pas la chaine dans la phrase

ne trouve pas la chaine s'il en manque une partie

Avec LIKE et BLOB

sensible à la casse

ne trouve pas la chaine dans la phrase

ne trouve pas la chaine s'il en manque une partie

Anonymus.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...