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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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.
_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:
$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: abuse@webatou.net
$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:
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 ...
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 ...
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 ...
laurent sturm
Salut, Voila une solution:
$t = split(" ", $mytext) $cpt = 0;
foreach ($t as $v) { $mot_cle[$cpt] = "(Mots_cles LIKE ' %$v% ')"; $cpt++; }
"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
Salut,
Voila une solution:
$t = split(" ", $mytext)
$cpt = 0;
foreach ($t as $v)
{
$mot_cle[$cpt] = "(Mots_cles LIKE ' %$v% ')";
$cpt++;
}
"Pierre" <p.leccia@laposte.net> a écrit dans le message de
news:chrei2$kje$1@news-reader4.wanadoo.fr...
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 ?
"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
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
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
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
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
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...
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
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
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.