Quelle est la meilleure méthode pour séparer les discussions imbriquées sur plusieurs pages - pour une application web?

StackOverflow https://stackoverflow.com/questions/582315

Question

Je suis la conception d'un affichage de message en fil pour une application PHP / MySQL - comme les commentaires sur Slashdot ou Youtube - et je me demande comment je devrais aller sur la commande les commentaires et le séparant en pages afin que vous puissiez avoir, disons, 20 commentaires à une page, mais ont encore les emboîtés.

Commentaires dans mon application peuvent être imbriquées les niveaux illimités, et cette structure est représentée à l'aide ce que je crois est une table de relation d'adjacence, une table séparée contenant une ligne pour chaque paire qui a une relation ascendent / descendante. Cette table de relation a CHILDID, PARENTID et niveau où un niveau de 2 signifie « grand-parent », et ainsi de suite.

Ma question est l'une des deux utilisabilité pour l'utilisateur final et de pratique de la construction d'une requête DB efficace. J'ai examiné ces options:

  • Fractionnement des résultats en pages par date, quelle que soit la position dans l'arbre, de sorte que tous les commentaires dans un certain intervalle de dates apparaîtront ensemble, même si elles ne semblent pas avec leurs parents. Tout commentaire qui a été publié à un moment similaire à son parent apparaît sur la même page et dans ces cas, nous pouvons les afficher « imbriquées », mais il y aura des commentaires qui sont orphelins de leurs parents. Ceci est probablement acceptable - c'est la façon dont les choses sont faites dans les commentaires YouTube - un commentaire fait beaucoup plus tard que son parent ne figure pas sur la même page que son parent (si le parent ne figure pas sur la dernière pages), mais apparaissent avec les autres nouveaux commentaires.

  • Récupérer les nœuds afin que vous traverserait un arbre. Cela donne la priorité à la structure de l'arbre plutôt que la date, bien que les frères et sœurs peuvent encore être triés par date. L'avantage à ce que les réponses sont toujours placés avec leurs parents (le commentaire qu'ils sont en réponse à), même si ce parent est un certain nombre de pages de commentaires les plus récents. Voici comment les choses sont faites sur des applications telles que le blog de icanhascheezburger. Je n'aime pas quelques choses à ce sujet, comme la façon que tout le monde est tenté d'ajouter une réponse à tout ce qui est la plus grande branche d'arbre.

  • La troisième option consiste à faire comme Slashdot fait, où il ne se sépare pas des commentaires dans les pages, mais il a un grand arbre -. Afin de garder la taille de page gérable il commence culling commentaires à faible note à la place

Je pense que la première serait la plus simple requête DB donné ma table de relation, mais serait ouvert à d'autres idées.

Certains de ces systèmes, de trois types, limiter le niveau d'imbrication d'une certaine manière - ce qui est assez facile à faire, une fois que nous avons récursifs sur les niveaux X tout peut être combiné autre ensemble comme si elles sont frères et sœurs. Par exemple, les commentaires YouTube rendent à un seul niveau. D'autres systèmes disent parfois « niveau d'imbrication dépassé » après 5 ou si les niveaux.

Était-ce utile?

La solution

Je suppose que la raison pour laquelle vous voulez des commentaires imbriqués tout est parce que vos utilisateurs ont tendance à vouloir lire un seul fil d'intérêt à la fois. Autrement dit, vous avez des raisons de croire que les utilisateurs vont créer des fils de chaînes cohérentes de la pensée, et / ou ce qui sera discuté dans un thread intéressera certains utilisateurs mais pas d'autres.

Si tel est le cas, je ne sais pas pourquoi vous voulez jamais de diviser arbitrairement un fil sur plusieurs pages par date (Option 1). En utilisant une seule page avec des commentaires culling faible nominale (option 3) semble un peu dur et peut décourager les utilisateurs de poster des commentaires. Cela peut être une bonne chose si vous avez une masse d'audience comme Slashdot, mais il peut être indésirable pour les sites avec plus typiques taux de visite.

Peut-être que vous pouvez avoir quelque chose comme l'option 2, avec toutes les discussions sur la même page, mais si un thread commence à devenir trop longtemps, il devient enroulé en un seul lien qui amène l'utilisateur à une page dédiée à ce fil. Alternativement, les fils longs peuvent être réduits à afficher uniquement les lignes d'objet et les auteurs, chacun qui lien à leur tour à l'endroit approprié dans une page dédiée pour le fil.

Je soupçonne que la tendance des utilisateurs à écrire des commentaires non pertinents dans le plus grand fil est un produit d'utilisateurs ne voulant pas être dérangé par le défilement pour trouver le bout du fil, ou de trouver un fil qui est plus approprié. Par compactage automatique de longs fils, laissant la racine de tous les sujets affichés sur une seule page de longueur raisonnable, les utilisateurs peuvent facilement rechercher un fil d'intérêt et y ajouter si on le souhaite.

Autres conseils

Je pense que ce dont vous avez besoin est un stockage de données hiérarchiques dans une base de données. Vous devez commencer par cet article: article à sitepoint article sur le site de MySQL

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top