Salut à tous
J'ai déjà posté sur OC où j'ai pu obtenir une aide de Julp, mais étant donné qu'on a pas vraiment trouvé de solution, je tente ici, peut-être que quelqu'un d'autre aura une idée .
Donc je suis en train de bosser sur un système de remerciements de posts, dont voici les caractéristiques :
- Un sujet peut contenir plusieurs posts.
- Un post peut être remercié 0 ou n fois.
- Un membre peut remercier 0 ou 1 fois un post.
- A la fin de chaque post, j'aimerai afficher la liste des gens ayant remercié le post.
- Sur chaque post, l'utilisateur a une icône permettant de remercier l'utilisateur du message, s'il a déjà remercié l'utilisateur, l'icône change pour permettre à l'utilisateur de retirer son remerciement.
C'est le même principe que les j'aime sur Facebook.
Actuellement, j'ai une table qui est la suivante : forum_posts_thanks(uid, postid) tous les deux en clés uniques.
Du coup, je cherchais comment faire pour coder tout ça. Je n'ai eu aucun soucis pour l'insertion des données dans la BDD, par contre pour l'affichage je galère un peu. Comment faire pour afficher la liste des remerciements en bas de chaque post sans faire de requête dans une boucle (sachant que mon forum a déjà 19 requêtes et qu'il y a 20 messages par page, il y aurait donc 39 requêtes) ?
J'ai réussi à avoir un résultat avec le code suivant :
1 2 3 4 5 6 7 8 9 10 11 | SELECT post.post_id, post.topic_id, post.post_content,post.post_date, post.post_sender, post.post_helped, post.post_reported, post.post_edit_time, post.post_edit_reason, post.post_ip, user.id, user.avatar, user.login, user.signature, user.nbPosts, groups.color, groups.groupid, groups.name, GROUP_CONCAT(fpt.user_id) as thankslist, GROUP_CONCAT(fpt_users.login) as user_list FROM forumposts post LEFT JOIN users user ON user.id = post.post_sender LEFT JOIN groups ON groups.id = user.groupid LEFT JOIN forum_posts_thanks fpt ON fpt.post_id = post.post_id LEFT JOIN users fpt_users ON fpt_users.id = fpt.user_id WHERE post.topic_id = :tid GROUP BY post.post_id ORDER BY post.post_date ' . $order . ' LIMIT '.$limit; |
Mais c'est un peu bancal comme code (mais ça marche) et je ne sais pas ce que ça vaut niveau optimisation . Les deux premières jointures permettent de récupérer les informations sur le posteur du message, la troisième de récupérer la liste des "remercieurs" et la dernière de récupérer leurs pseudos. Est-ce qu'il vaut mieux faire une requête dans une boucle ? Ou est-ce qu'il y aurait une solution moins bancale ?
Julp m'a suggéré l'idée de récupérer la liste des gens ayant remercié uniquement à la demande (donc en Ajax), cette solution me plait bien, mais pose un problème puisque sans la liste des utilisateurs ayant remercié le message, je ne vois pas vraiment comment savoir si un membre a déjà remercié ou non un message (encore une fois sans faire de requêtes supplémentaire).
Bref, je suis un peu de l'impasse. Du coup si quelqu'un aurait une idée pour faire un truc propre, je ne serai pas contre . Sinon je m'en tiendrai à ma solution, à priori vu les statistiques du forum (et le sujet), il y a peu de chances qu'un message soit remercié plus de 50 fois, mais ça m'embête quand même un peu.
Merci d'avance pour votre aide !
A bientôt.