Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1570 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  requete mysql ou comparaison de tableaux php ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

requete mysql ou comparaison de tableaux php ?

n°2211631
nebenobo12
Posté le 25-11-2013 à 23:05:04  profilanswer
 

Bonjour à tous,
 
voici mon problème :
 
je développe un site de recettes de cuisine ; pour faire simple, j'ai une table de recettes 'recettes' (id_recette,nom_recette etc), une table de mots-clef 'tags_recette' (id_tag,nom_tag) et une table de relations entre les recettes et mots-clef 'tags_recette_assoc' (tags_assoc_id,tag_id,tag_recette) où tag_id se réfère à id_tag et tag_recette à id_recette.
 
Lorsque j'affiche la page d'une recette, j'aimerais proposer uniquement 3 recettes similaires à la fin, tant qu'à faire celles qui ont le plus de tags en commun avec elle.
 
Comment dois-je m'y prendre ? Requête(s) mysql ou comparaisons de tableaux php ? Avec mon peu de pratique je comptais mettre les tag_id correspondant à la recette en question dans un tableau, puis dans une boucle sur toutes les autres recettes de la table mettre les tags correspondants dans un tableau et comparer les tableaux avec un truc du genre array_values(array_intersect)), mais j'imagine que ça mange de la ressource non ? Sachant qu'il y a déjà beaucoup de requêtes dans l'affichage de cette page...
 
Merci pour votre aide !

mood
Publicité
Posté le 25-11-2013 à 23:05:04  profilanswer
 

n°2211635
Volkhen
Posté le 25-11-2013 à 23:22:45  profilanswer
 

Si tu as accès à un serveur avec du tomcat, je te conseilles de mettre en place un serveur Solr. Pour faire de la recherche sur du texte c'est assez bluffant.
 
Si ce n'est pas possible, avoir une table en myisam qui reçoit une copie des tags pour faire des recherches fulltext sera moins performant que du solr mais devrait donner des résultats plutôt pertinents.


---------------
Main/Alt1/Alt2/Alt3
n°2211801
czh
Posté le 26-11-2013 à 23:16:06  profilanswer
 

Tu peux récupérer tous les tags de la recette avec la requête mysql de ton choix.
 
Puis tu fais une requête pour récupérer les recettes qui ont le plus de tag en commun avec la recette :
SELECT COUNT(*) as count, tag_recette FROM tags_recette_assoc GROUP BY tag_recette WHERE id_tag IN ( ... ta liste de tag... ) ORDER BY count DESC LIMIT 3
 
Tu peux remonter les recettes en même temps avec cette requête.
 

Citation :

Comment dois-je m'y prendre ? Requête(s) mysql ou comparaisons de tableaux php ? Avec mon peu de pratique je comptais mettre les tag_id correspondant à la recette en question dans un tableau, puis dans une boucle sur toutes les autres recettes de la table mettre les tags correspondants dans un tableau et comparer les tableaux avec un truc du genre array_values(array_intersect)), mais j'imagine que ça mange de la ressource non ? Sachant qu'il y a déjà beaucoup de requêtes dans l'affichage de cette page...


 
La solution "tableau PHP" et "GROUP BY mysql" fonctionnent bien avec un petit nombre de recettes et de tag. Mais ce n'est plus le cas si le nombre de recettes dépasse un certain seuil, soit c'est le serveur PHP qui va flancher, soit le serveur MySQL. Lorsque le traitement est tel qu'il pose des problèmes de performance en temps réel, il faut stocker les résultats dans une base intermédiaire : dans une autre table, dans un serveur de cache etc. Et il faut contrôler la durée de vie des résultats de traitement, en faisant expirer la validité des données après une certain durée ou une action précise.


Message édité par czh le 26-11-2013 à 23:19:43
n°2211802
nebenobo12
Posté le 26-11-2013 à 23:21:06  profilanswer
 

Merci pour ta réponse Volkhen, apparemment non comme je suis mutualisé je n'ai pas de Tomcat.
Quant à ton autre solution, une recherche fulltext n'est-elle justement pas moins performante qu'une requête sur des tags déjà associés aux recettes dans une table, sachant qu'il n'y a pas plus de 8 tags par recette ?
Ce que je voulais savoir en fait, comme je me doute qu'une requête mysql directe sera plus performante qu'une comparaison de tableaux php, c'est à quoi ressemblerait cette requête avec mes tables ? Je ne maîtrise pas bien les jointures et les requêtes "complexes" de ce genre...


Message édité par nebenobo12 le 26-11-2013 à 23:54:37
n°2211808
nebenobo12
Posté le 27-11-2013 à 00:24:27  profilanswer
 

super czh, ta requête me semble adaptée à mon cas, je l'essaierai dès demain.
En fait comme je disais à Volkhen, je n'ai pas plus de 8 tags par recette, et j'ajouterai que je pense qu'il n'y aura jamais plus de 5000 recettes sur le site, du coup penses-tu que cette requête soit la solution la plus pertinente au regard de celles proposées par Volkhen ?

n°2211928
nebenobo12
Posté le 27-11-2013 à 19:56:39  profilanswer
 

ok merci czh, ta requête fonctionne mais j'ai dû y apporter 2 corrections :
 
SELECT COUNT(*) as count, tag_recette FROM tags_recette_assoc WHERE tag_id IN ( ... ta liste de tag... ) GROUP BY tag_recette ORDER BY count DESC LIMIT 3
 
Merci à tous !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  requete mysql ou comparaison de tableaux php ?

 

Sujets relatifs
Projet de fin d'année. (Java,Html,MySQL,PHP)[débutant] Récupérer un vecteur avec une seule requête.
C++ et procédure stockées MySqlMySql mes tables sont la mais je ne les vois pas
Help [PHP/MySQL] et programmation de jeuWarning: mysql_num_rows() expects parameter 1 to be resource
aide requête sql updateen fonction champ autre table[Excel 2007] requete SQL avec critere issu d'excel
requete et datgridview la galere... 
Plus de sujets relatifs à : requete mysql ou comparaison de tableaux php ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR