Bonjour,
je suis toujours sur mon blog et je fais actuellement la partie commentaires.
j'aimerais faire un systeme de commentaires similaire à celui de Disqus ou facebook qui permet aux utilisateurs de répondre aux commentaires et que la réponse soit affichée en dessous dudit commentaire.
J'ai déjà fait la base de données de cette forme :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| +------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| deleted | tinyint(1) | NO | | NULL | |
| content | text | NO | | NULL | |
| upvote | int(10) unsigned | NO | | NULL | |
| downvote | int(10) unsigned | NO | | NULL | |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| post_id | int(10) unsigned | NO | MUL | NULL | |
| comment_id | int(10) unsigned | NO | | NULL | |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
+------------+------------------+------+-----+---------------------+----------------+ |
là où je bloque c'est pour les requêtes sql : comment faire pour dans le minimum de requêtes récupérer les derniers commentaires et les réponses qui ont été faites dessus sans dépasser un total de 50 commentaires (50 est donné comme exemple, ce n'est pas un impératif).
j'ai pensé à quelques trucs mais qui me posent tous des problèmes :
1) récupérer N commentaires "de base" (qui ne répondent pas à un autre) puis récupérer les réponses éventuelles à ces commentaires puis les réponses aux réponses...-> problème 1 : si j'ai 50 "étages" de réponses, j'ai 50 requêtes et donc ça fait très lourd
-> problème 2 : je ne peux pas limiter à 50 commentaires visibles puisque je ne sais pas d'avance combien il y a de réponses ou alors j'en élimine du résultat mais dans ce cas j'ai fait une requête lourde pour rien
2) récupérer 50 commentaires puis les trier en conversations-> problème : si le commentaire le plus récent est une réponse à un commentaire ancien qui n'est pas dans les X récupérés, je me retrouve avec un commentaire "orphelin" qui n'a pas son commentaire parent
sous problème : si je laisse tomber ces commentaires orphelins, je peux très bien me retrouver au final avec 3 commentaires affichés et 47 orphelins qui ont été supprimés
3) ne pas limiter le nombre de commentaires et tous les récupérer puis trier en conversation-> problème : si j'ai 2000 commentaires à afficher d'un coup, d'une part php devoir traiter un tableau énorme (donc ça risque d'être long) et ensuite, le navigateur qui va recevoir en AJAX une réponse énorme risque de ne pas trop apprécier...
J'avoue que je ne sais pas trop comment faire donc si certains ont des idées, je suis preneur.
Partager