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