Bonjour,
Mon projet propose à des membres de s'abonner à des stars.
J'ai besoin de savoir pour chaque star, les 10 autres stars avec le plus d'abonnés.
Actuellement j'ai un script PHP qui me permet de lister les identifiants de "stars".
Chaque identifiant de star devient un critère de la seconde requête. J'affiche pour chaque star, les 10 premières autres stars liées avec un pourcentage d'abonnement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT DISTINCT f1.id_star FROM oa_fan f1 INNER JOIN oa_fan f2 ON f1.id_member=f2.id_member WHERE f1.id_star<>f2.id_star
Actuellement ces 2 requêtes sont dans un script PHP avec une boucle sur le résultat des lignes renvoyées par la première requête en passant à chaque itération l'identifiant de la star en critère de la seconde requête ($row['id_star'])
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT f1.id_star, f2.id_star AS linked_star_id, ROUND((COUNT(*) / s1.nb_fans)*100, 2) AS p_cent FROM oa_fan f1 INNER JOIN oa_fan f2 ON f1.id_member=f2.id_member INNER JOIN oa_star s1 ON f1.id_star=s1.id_star INNER JOIN oa_star s2 ON f2.id_star=s2.id_star WHERE f1.id_star<>f2.id_star AND f1.id_star=".$row['id_star']." GROUP BY f2.id_star ORDER BY COUNT(*) DESC LIMIT 10
Ce projet doit maintenant s'inclure dans un outil qui n'accepte en paramètre qu'une et une seule requête SELECT sur ma base MySql.
Existe-t-il une solution pour rassembler mes 2 requêtes tout en conservant les contraintes de retourner les 10 premières lignes à chaque fois et calculer mon pourcentage ?
Merci d'avance pour vos suggestions.
Partager