Afficher les articles relatifs à celui consulté en PHP/MySQL


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 20:24

Salut,

Je voudrais afficher sur mes articles un bloc "Vous aimerez également :" suivi d'une liste de 5 articles pas forcément de la même catégorie dans le site mais dont les titres laissent à penser qu'ils sont similaires.

Exemple : titre "L'Audi A8 W16, missile de luxe"
et que ça puisse me sortir dans "Vous aimerez également :" l'article que j'ai écris le mois dernier "Bugatti Veyron W16 : l'action de Total monte en flèche". :mrgreen:

Quelqu'un aurait un tuto ou une piste technique pour sortir ça ?

Un grand merci

PS : j'imagine que ça fonctionne à grand renforts d'explode et de like % ?


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8565
Inscription: 23 Nov 2005

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 20:38

Je gérerais davantage ça en créant un système d'association d'article, un article pouvant être associé à n autres.

Ou si tu veux automatiser cela (ce qui me semble être le cas vu qu'une partie des titres est identique) ça peut en effet se faire via une recherche sur les autres titres d'articles présent dans ta base, après avoir nettoyé ceux-ci des mots inutiles (pronoms, déterminants, conjonctions diverses).


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 20:49

Merci c'est ce que j'ai commencé à faire. J'ai déjà 600 articles et je ne peux/vais pas les associer à la main ni en automatique.
Je suis parti sur du str_replace pour virer les "le, la, les, des, du, au" etc., explode, like et ça devrait rouler.


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8565
Inscription: 23 Nov 2005

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 21:27

Le souci c'est qu'en automatisant, tu risques à un moment d'avoir des listes d'articles non négligeables de conseillés en-dessous d'un article.


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1761
Inscription: 31 Aoû 2007

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 21:54

Regarde la méthode utilisé par le plugin wordpress "related post".
Je pense qu'il faut partir sur des % LIKE et des bons gros preg_match, mais par la suite, les faire à la main pourrait être pas mal.

Edit: j'ignore quel module c'est sur PHPBB, mais matte un peu en dessous de la réponse "sur ce thème".

Un moteur google peut être pas mal sinon pour faire ce genre de chose (à vérifier bien sûr)


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Jeu Fév 25, 2010 22:15

UsagiYojimbo a écrit:Le souci c'est qu'en automatisant, tu risques à un moment d'avoir des listes d'articles non négligeables de conseillés en-dessous d'un article.

Non tinquite, je croise avec d'autres critères et je limite a 5 articles.


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 4:56

Perso je verrai bien en premier un traitement sur le titre qui remplace tous les caracteres non alphanumeriques par des espaces, ensuite un explode sur les caracteres d'espace, et tu te construis une requete avec une boucle for et des LIKE avec le tableau que t'as obtenu avec l'explode (en ne gardant que les mots de plus de deux caracteres par exemple).

Autre chose pour la précision tu peux additionner le nombre de mots qui matchs bien ;) (je garanti pas la rapidité, c'est juste pour te donner des idées)
Pour exemple essaye une requete du style :
Code: Tout sélectionner
SELECT *, (TITRE LIKE '%audi%') AS TEST1, (TITRE LIKE '%a8%') AS TEST2, (TITRE LIKE '%w16%') AS TEST3 FROM `tatable` ORDER BY (TEST1+TEST2+TEST3) DESC

t'as juste à remplacer tatable par le nom de ta table d'articles, et TITRE par le champ qui correspond aux titres de tes articles, et les mots que tu recherches. Je t'ai mis les mots audi, a8, et w16 pour rester dans ton exemple ;)

Si t'as beaucoup d'affluence regarde au niveau temps de réponse d'une telle requête...
Après ça dépend de ton serveur et du nombre de tes articles, mais les LIKE c'est pas forcement très rapide...
Fais des tests, si ca te pénalise trop tu peux aussi précalculer et enregistrer en bdd dans un nouveau champ pour chaque article... genre quand tu créé un article ca te calcul direct les articles similaires, et t'enregistres les id des articles séparés par des virgules dans un champ tinytext.
Limite si tu veux que ce soit actualisé tu te fais un script en tache cron qui se lance une fois de temps en temps en pleine nuit et qui recalculera tout ça...


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19587
Inscription: 8 Aoû 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 10:16

j'utiliserais plutôt des regexp dans la requête : ça éviterait ainsi de sélectionner des morceaux de mots, du genre like "%audi%" qui te ressortirait aussi "bon matériel audio" :wink:


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 10:28

exact, avec des \b autour :)


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 10:44

par contre, quelle est la conso en ressoruces d'un str_replace() ?


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19587
Inscription: 8 Aoû 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 10:56

moins qu'un preg_replace()


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 10:56

oui ça je sais, mais c'est considéré comme gourmand ou tout à fait standard


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 11:01

bin faut tester...
par contre moi j'aurais plutot mis un preg_replace pour retirer les caractères non alpha numériques...

Code: Tout sélectionner
$ret=preg_replace("/\W/"," ",$tonTitre);


tu compte te faire un tableau des caracteres à retirer avec ton str_replace?


[edit] benchmark entre str-replace et preg_replace : http://www.php-scripts.com/php_diary/011303.php3


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 11:26

Merci mais je ne comprends rien aux regex.

Prenons un exemple :
Allumettes de pomme de terre façon Cuisinetoo (reblochon)
Quel regex pour en sortir
allumettes
pommes de terre
reblochon

J'ai bien sur isolé pomme de terres par un str_replace (je le remplace par un chiffre).

?


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19587
Inscription: 8 Aoû 2004

Re: Afficher les articles relatifs à celui consulté en PHP/MySQL

Message le Ven Fév 26, 2010 11:27

dans leur 1° benchmark, ils n'ont pas utilisé str_replace de façon efficiente, ce qui fait que sa performance était moindre. En utilisant str_replace(array("-","."," ","(",")"),"", $phone); ils auraient gagné un facteur de 5 quasiment
milkiway a écrit:Allumettes de pomme de terre façon Cuisinetoo (reblochon)
Quel regex pour en sortir
allumettes
pommes de terre
reblochon

Code: Tout sélectionner
select * from tatable where title regexp "(allumettes|pommes de terre|reblochon)"
après, il faut voir pour gérer les pluriels, etc...

Afficher les articles relatifs à celui consulté en PHP/MySQL

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité