Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche sur plusieurs mots cle

7 réponses
Avatar
Pierre
Bonjour,

Voilà, j'ai crée une base de donnée MySQL/PHP avec un champ nommé mots_cle
au
format TEXT et qui intègre une série de mots clés descriptif.

J'ai crée ensuite un formulaire de recherche et un script PHP pour aller
chercher les références qui correspondent aux mots clés saisis. Le problème
c'est que dans mon champ de recherche, je ne peux entrer qu'un seul mot clé.

Exemple :
Dans ma base de donnée, j'ai une ligne qui a le champ Mots_cles suivant :
photo paysages paris

Si, dans mon formulaire de recherche je tape : paysages, cette ligne va
ressortir. Par contre, si je tape photo paris, cela ne me sort rien du tout.

Voici comme j'ai procédé pour mon script de recherche : (photos est ma
table) et Mots_cles est la variable qui comprends mes mots cles au format
texte.

$requete="SELECT*FROM photos WHERE (Mots_cles LIKE '%$Mots_cles%')";

Comment faire donc pour que plusieurs mots clés soient pris en compte ?

Merci !
Pierre

7 réponses

Avatar
Thierry SCHMIT
bonjour

voici la solution que j'ai apporté au problème

define("LG_MIN_KEYWORD" , 1)
$keys = explode(" ", $keywords);
$andOr = "and"; // ou "or" selon un test, une préférence....
$query = "select * from urls where ";
$max = count($keys) - 1;
$and = false;
for ($i = 0; $i < $max; $i++) {
if ( strlen($keys[$i]) > LG_MIN_KEYWORD ) {
$and = true;
$query .= "(title like "%$keys[$i]%") $andOr ";
}
}
if ( strlen($keys[$i]) > LG_MIN_KEYWORD ) {
$and = true;
$query .= "(title like "%$keys[$i]%") ";
}

voilà, j'espère que le code parle de lui même.
LG_MIN_KEYWORD sert à gérer les mots clé trop court
si à la fin $and == false, alors aucun mot clé n'est valable.

Personnellement je suis en train de réfléchir à une solution mettant
en oeuvre une table de mots clés, cette table comportant 2 colonnes
une pour un et un seul mot clé, et une pour lier le mot clé à une url
j'ai l'intuition que cela devrait être plus performant mais j'ai pas encore
trouvé d'argument.
Amha, le faille de la méthode c'est le LIKE, probablement lent.
Mais je ne suis pas un expert SQL.
Avatar
_nop_nop_quinton_
$requete="SELECT*FROM photos WHERE (Mots_cles LIKE '%$Mots_cles%')";


peut-etre regarder les fonctions

$list = split(' ', $mot_cles),
join('OR', $list);

sinon, passer par une boucle for pour generer une requete sql de ce type

WHERE mot LIKE '%xxx%' OR mot LIKE '%yyy%'


--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
BaBS
Le Fri, 10 Sep 2004 06:01:00 +0000, Pierre a écrit :

Bonjour,
Bonjour :)


Voilà, j'ai crée une base de donnée MySQL/PHP avec un champ nommé mots_cle
au
format TEXT et qui intègre une série de mots clés descriptif.

J'ai crée ensuite un formulaire de recherche et un script PHP pour aller
chercher les références qui correspondent aux mots clés saisis. Le problème
c'est que dans mon champ de recherche, je ne peux entrer qu'un seul mot clé.

Exemple :
Dans ma base de donnée, j'ai une ligne qui a le champ Mots_cles suivant :
photo paysages paris

Si, dans mon formulaire de recherche je tape : paysages, cette ligne va
ressortir. Par contre, si je tape photo paris, cela ne me sort rien du tout.

Voici comme j'ai procédé pour mon script de recherche : (photos est ma
table) et Mots_cles est la variable qui comprends mes mots cles au format
texte.

$requete="SELECT*FROM photos WHERE (Mots_cles LIKE '%$Mots_cles%')";


Perso, je ferais une feinte :
decouper les mots clefs et pour chacun rajouter un bout dans la
requete

// creation d'un tableau avec un mot clef par entrée
$tbl_mot_clef = explode ( " ", $Motes_cles ");

// Structure de la requete
$requete = "SELECT * FROM photos WHERE 1 ";

// c'est tres cracra, on pourais remplacer la condition du while par un
// $mot = array_shift $tbl_mot_clef;

// Bouclage generant la requete
// $i => indice du tableau
$i = -1;
while ( $mot = $tbl_mot_clef[++$i] ) {
$requete .= "AND Mots_cles LIKE '%$mot%' ";
}

Petit plus tu peut demander au visiteur de choisir entre un OR ou un AND ...
[dans ce cas, WHERE 0 et OR Mots...]


Vala :)

++
BaBS

P.S.: Dis toujours si cela t'as aidé :)

Comment faire donc pour que plusieurs mots clés soient pris en compte ?

Merci !
Pierre
--

I've lost my mind .
But it's on a backup tape ...
... Somewhere ...

Avatar
laurent sturm
Salut,
Voila une solution:

$t = split(" ", $mytext)
$cpt = 0;

foreach ($t as $v)
{
$mot_cle[$cpt] = "(Mots_cles LIKE ' %$v% ')";
$cpt++;
}

$sql = "SELECT*FROM photos WHERE ";

for ( $i = 0; $i < $cpt ; $i++)
{
if( $i < $cpt -1) { $sql .= $mot_cle[$i] ." AND ";}
if( $i == $cpt -1) { $sql .= $mot_cle[$i];}
}

@+



"Pierre" a écrit dans le message de
news:chrei2$kje$
Bonjour,

Voilà, j'ai crée une base de donnée MySQL/PHP avec un champ nommé mots_cle
au
format TEXT et qui intègre une série de mots clés descriptif.

J'ai crée ensuite un formulaire de recherche et un script PHP pour aller
chercher les références qui correspondent aux mots clés saisis. Le
problème

c'est que dans mon champ de recherche, je ne peux entrer qu'un seul mot
clé.


Exemple :
Dans ma base de donnée, j'ai une ligne qui a le champ Mots_cles suivant :
photo paysages paris

Si, dans mon formulaire de recherche je tape : paysages, cette ligne va
ressortir. Par contre, si je tape photo paris, cela ne me sort rien du
tout.


Voici comme j'ai procédé pour mon script de recherche : (photos est ma
table) et Mots_cles est la variable qui comprends mes mots cles au format
texte.

$requete="SELECT*FROM photos WHERE (Mots_cles LIKE '%$Mots_cles%')";

Comment faire donc pour que plusieurs mots clés soient pris en compte ?

Merci !
Pierre


Avatar
Nicklas
Le Fri, 10 Sep 2004 06:01:00 +0000, Pierre a écrit :

Bonjour,

Voilà, j'ai crée une base de donnée MySQL/PHP avec un champ nommé mots_cle
au
format TEXT et qui intègre une série de mots clés descriptif.

J'ai crée ensuite un formulaire de recherche et un script PHP pour aller
chercher les références qui correspondent aux mots clés saisis. Le problème
c'est que dans mon champ de recherche, je ne peux entrer qu'un seul mot clé.

Exemple :
Dans ma base de donnée, j'ai une ligne qui a le champ Mots_cles suivant :
photo paysages paris

Si, dans mon formulaire de recherche je tape : paysages, cette ligne va
ressortir. Par contre, si je tape photo paris, cela ne me sort rien du tout.

Voici comme j'ai procédé pour mon script de recherche : (photos est ma
table) et Mots_cles est la variable qui comprends mes mots cles au format
texte.

$requete="SELECT*FROM photos WHERE (Mots_cles LIKE '%$Mots_cles%')";

Comment faire donc pour que plusieurs mots clés soient pris en compte ?

Merci !
Pierre


Tu définis une clé de type FULLTEXT sur ton champ (voir doc de MySQL),
puis tu fais une requête dans le style :

SELECT id, MATCH (ton_champ) AGAINST ('$motsclé') AS
perti FROM table WHERE MATCH (ton_champ) AGAINST
('$motsclé') ORDER BY perti DESC

Tu auras une recherche performante et pertinente.

__
Nicolas

ProgWeb - Tout pour développer son site Web
http://www.progweb.com

Avatar
burninghat
Tu trouveras ici : http://www.phpfrance.com/tutorials/index.php?id8 un
chouette tutoriel pour faire un moteur de recherche perso, permettant de
faire le genre de requête que tu cherches je pense...

@+
--
Burninghat
Avatar
Pierre
Je remercie tout le monde pour les nombreuses réponses !
Comme je suis pas une bête de PHP/MySQL je vais essayer d'étudier ça ligne
par ligne.

Encore merci !
Pierre