Aller au contenu
scarabeuz

Rechercher dans MySql

Noter ce sujet :

Recommended Posts

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 ?

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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....

Partager ce message


Lien à poster
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...

Partager ce message


Lien à poster
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'

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest exabs

: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.

Partager ce message


Lien à poster
Partager sur d’autres sites

enfaite je voudrais trouver 'web' dans la colonne col qui correspondrait par exemple a :

le web insolite....

Modifié par scarabeuz

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest exabs
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...

Partager ce message


Lien à poster
Partager sur d’autres sites

MERCI MERCI MERCI MERCI :clap:

au moins j'ai plus besoin d'essayer trente mille combinaison de syntaxe... et vais partir dans une autre solution ;)

Partager ce message


Lien à poster
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 scarabeuz

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest exabs

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...

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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 scarabeuz

Partager ce message


Lien à poster
Partager sur d’autres sites

dans se cas la

$search([^a-zA-Z0-9])

veux dire trouver le mot $search qui n'as pas de lettre ni de chiffre apres sa dernier lettre ;)

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest exabs

Mais si tu cherches 'rien', il doit trouver 'lemurien' non ?

Partager ce message


Lien à poster
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 scarabeuz

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest exabs

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

Partager ce message


Lien à poster
Partager sur d’autres sites

arf oui, on etait pas sur la même longueur <_<

je viens d'essayer avec $search = "dez"....

Et il me trouve "vendez"...

Modifié par scarabeuz

Partager ce message


Lien à poster
Partager sur d’autres sites

Et ?

REGEXP '([^a-zA-Z0-9])$search([^a-zA-Z0-9])'";

Ah vu de nez sa devrait marcher sa non ?

Modifié par scarabeuz

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui ma colonne est de type BLOB se qui veux bien dire "sensible à la casse"

TEXTE même propriété que BLOB mais "insensible à la casse"

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×