probleme de recherche dans une base de données avec l'opérateur LIKE

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme de recherche dans une base de données avec l'opérateur LIKE

par Truc » 15 mai 2008, 10:50

Modération :
Puisque ta question est résolue, j'ajoute le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.

Tu peux réaliser cette opération toi-même
en cliquant sur le bouton Image qui s'affiche en haut à gauche de ce sujet
si tu as posté le 1er message en tant que membre (inscrit et identifié).

Alors... inscris-toi !!! ;)

par Invité » 15 mai 2008, 09:58

Si tu tiens vraiment à approfondir les possibilités de recherche textuelle de MySQL, il faut t'orienter vers la recherche "fulltext" (http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html), qui te permet de vraiment faire de la recherche (sans recherche floue, ceci dit).

En bonus, il y a même la recherche booléenne, et quelques autres subtilités..

(en fait, tu peux pas vraiment faire de "moteur de recherche" avec like.. tout ce que tu fait c'est vérifier l'une ou l'autre présence, mais tu ne génères pas un score qui va te permettre de classer tes résultats.. enfin, sauf avec un traitement vachement complexe en php, mais a quoi bon, puisque fulltext fonctionne déjà et en bien mieux..)
Merci de ton conseil Berzemus, je vais étudier tout ça...

Re: probleme de recherche dans une base de données avec l'op

par Berzemus » 14 mai 2008, 23:21

Bonjour,

Je débute en PHP et je réalise actuellement un petit moteur de recherche en PHP/MySQL avec plusieurs critères de recherche. Mais j'ai un petit souci, avec ma requête : quand l'un des champs du formulaire est null, il m'affiche le contenu entier de ma base de données.
Si tu tiens vraiment à approfondir les possibilités de recherche textuelle de MySQL, il faut t'orienter vers la recherche "fulltext" (http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html), qui te permet de vraiment faire de la recherche (sans recherche floue, ceci dit).

En bonus, il y a même la recherche booléenne, et quelques autres subtilités..

(en fait, tu peux pas vraiment faire de "moteur de recherche" avec like.. tout ce que tu fait c'est vérifier l'une ou l'autre présence, mais tu ne génères pas un score qui va te permettre de classer tes résultats.. enfin, sauf avec un traitement vachement complexe en php, mais a quoi bon, puisque fulltext fonctionne déjà et en bien mieux..)

franchement merci caroube

par nass » 14 mai 2008, 17:32

J'ai testé ce que tu m'a conseillé et ça fonctionne !!! :wink:

Voici le code:

Code : Tout sélectionner

if ($nom_anim) { $where_anim_nom = "anim_nom like '%".$nom_anim."%'"; } else { $where_anim_nom = "1!=1"; } if ($mot_cle) { $where_anim_mot_cle = "mot_cle like '%".$mot_cle."%'"; } else { $where_anim_mot_cle = "1!=1"; } $req="select* from animations where ".$where_anim_nom." or anim_date='$date_anim' or anim_categorie='$categorie_anim' or anim_genre='$genre_anim' or ".$where_anim_mot_cle." order by anim_date";
Merci encore caroube, T'es trop fort

par caroube » 14 mai 2008, 16:10

C'est sûr que si tu fais une recherche like '%%', ça va te retourner l'intégralité de ta base. Tu peux essayer un truc dans ce style :
if ($nom_anim) {
  $where_anim = "anim_nom like '%".$nom_anim."%'";
} else {
  $where_anim = "1!=1";
}
$req="select* from animations where ".$where_anim.
   " or anim_date='$date_anim' or anim_categorie='$categorie_anim' or anim_genre='$genre_anim' or mot_cle like '%".$mot_cle."%' order by anim_date";
Attention : tu peux avoir le même problème avec mot-cle.
Note : quand on construit des requêtes en dynamique avec des AND, il faut une clause toujours vraie quand rien n'est renseigné (typiquement 1=1) et avec des OR, une clause toujours fausse.

probleme de recherche dans une base de données avec l'opérat

par nass » 14 mai 2008, 15:00

Bonjour,

Je débute en PHP et je réalise actuellement un petit moteur de recherche en PHP/MySQL avec plusieurs critères de recherche. Mais j'ai un petit souci, avec ma requête : quand l'un des champs du formulaire est null, il m'affiche le contenu entier de ma base de données.

SGBD : MySQL5.0

Voici le shema de la table en question:

Code : Tout sélectionner

CREATE TABLE `animations` ( `anim_id` int(10) NOT NULL auto_increment, `anim_nom` varchar(100) character set utf8 collate utf8_bin NOT NULL, `anim_contenu` varchar(1000) character set utf8 collate utf8_bin NOT NULL, `anim_img` varchar(50) character set utf8 collate utf8_bin NOT NULL, `anim_categorie` varchar(30) character set utf8 collate utf8_bin NOT NULL, `anim_genre` varchar(50) character set utf8 collate utf8_bin NOT NULL, `mot_cle` varchar(50) character set utf8 collate utf8_bin NOT NULL, `anim_date` date NOT NULL, PRIMARY KEY (`anim_id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=5 ;
Voici ma requête:

Code : Tout sélectionner

$req="select* from animations where anim_nom like '%".$nom_anim."%' or anim_date='$date_anim' or anim_categorie='$categorie_anim' or anim_genre='$genre_anim' or mot_cle like '%".$mot_cle."%' order by anim_date";
Voici le echo de ma requête une fois exécutée:

Code : Tout sélectionner

select* from animations where anim_nom like '%%' or anim_date='' or anim_categorie='' or anim_genre='' or mot_cle like '%%' order by anim_date
Je pense que le problème vient des %, il faudrait que je puisse les enlever si le champs est null.

Merci d'avance pour votre aide.