Aller au contenu

Rechercher dans MySql


Sujets conseillés

Posté

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 ?

Posté

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.

Posté

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

Posté

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

Posté

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'

Posté

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

Posté (modifié)

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

le web insolite....

Modifié par Neoboot
Posté
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...

Posté

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 ;)

Posté (modifié)

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
Posté

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

Posté (modifié)

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
Posté (modifié)

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
Posté

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 ;)

Posté

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

Posté (modifié)

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
Posté

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

Posté (modifié)

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

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

Et il me trouve "vendez"...

Modifié par Neoboot
Posté (modifié)

Et ?

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

Ah vu de nez sa devrait marcher sa non ?

Modifié par Neoboot
Posté

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.

Posté

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"

Veuillez vous connecter pour commenter

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



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