8
votes

Comment puis-je faire des réponses aux commentaires? (Php)

Je veux créer quelque chose comme Reddit où ils ont des commentaires , puis répond au commentaire, puis répondez à la réponse.

Quel type de structure de base de données utilisent-ils? P>

you like food
     yes I love italian
        Yes i do like it too
     chinese is best


0 commentaires

6 Réponses :


8
votes

Vous pouvez ajouter une autre colonne à votre table de commentaires spécifiant parent_comment_id où vous le remplissez avec l'ID du commentaire (ou la réponse) L'utilisateur répond à. Dans le cas où le commentaire est une réponse directe à la poste (pas une réponse à un commentaire), cette colonne serait NULL.


5 commentaires

Exactement: les commentaires sont des commentaires, qu'ils soient des réponses ou non à d'autres commentaires.


Désolé, je suis si lent. J'ai compris! Merci. Maintenant ma question est de savoir comment puis-je indenter les réponses? Aurais-je besoin de connaître un type de relation? Telle que cette réponse est la première, cette réponse est la 2ed So indent x2, cette réponse est la 3ème, donc idxx3


@JPJP: Je ferais cela au niveau de l'application. Lorsque vous construisez l'arbre des commentaires, vous savez beaucoup pour les indenter. Juste un de plus comme le parent.


Donc, ce que vous dites, c'est que je sais comment combien de temps à partir de combien de parents le commentaire a? Si la réponse n'a pas de parent, alors n'engageez pas. La réponse de celui-ci a un parent, indentement dire 20px à gauche. Alors la réponse de la réponse est juste + 20px?


@JPJP: J'obtiendrai tous les commentaires d'une publication que vous souhaitez afficher et les utiliser tous construire une gamme de données. La structure de tableau pourrait être $ Commentaires = {id => {commentaires => texte, réponses => {id1, id2, ..}, ...} comme vous ajoutez les commentaires que vous ajoutez les réponses à The $ Commentaires Array, puis sur les réponses => Array du commentaire C'est une réponse à. (Gardez une matrice séparée éventuellement de commentaires de haut niveau). Itérate la liste des commentaires de niveau supérieur et suivez de manière récursive les réponses entrées. C'est imprimé la première réponse, puis imprimez les réponses de cette réponse. Donc, et ainsi de suite. Indent avec chaque étape.



0
votes

ajoutez un autre champ à votre table de commentaires qui "Répondre_to" ou d'une autre, et stockez l'ID du commentaire qu'il est en réponse à là.


0 commentaires

0
votes

Vous pouvez rendre la table des commentaires générique comme: xxx

où postting_type est une sorte de discriminateur, par exemple une chaîne "poste" ou "commentaire" ou un entier pour plus d'efficacité ( 1 = poste, 2 = commentaire, etc.).

Editer: Ceci est certes plus compliqué mais cela signifie que vous pouvez utiliser la même table de commentaires pour commentaires sur n'importe quoi, pas seulement les postes et les autres commentaires.


4 commentaires

Vous manquez la relation avec le commentaire «Parent».


Non, parce que puis postting_type est commentaire et postting_id est l'ID de commentaire parent.


Cela enfreint une convention pseudo-fk. De plus, dans ce cas, vous ne pouvez pas ajouter de FK à la table car le postting_id se réfèverait désormais à lui-même.


Correct, mais cela signifie que le système de commentaires pourrait être entièrement générique et utiliser une seule table.



0
votes

Vous n'avez pas besoin de la table des réponses. Comme d'autres les autres ont déjà signalé correctement, la récursion est la voie à suivre avec un SGBDM. Vous pouvez toujours envisager d'utiliser un SGBD de style NOSQL afin d'éviter de devoir faire face à une récursion.


0 commentaires

2
votes

Je ferais cela en faisant une table de référence croisée.

Exemple: p>

Table: Posts B> P>

EXAMPLE:
PAGES.... Page table

POSTS
 pstkey | pageid | user| Post
-------------------------------------
|   1   |    1   |  45 | Went to the store the....|
|   2   |    2   |  18 | Saw an apple on tv.....

COMMENTS
 comkey | pstkey | user  | Comment
-----------------------------------------------
|   1   |    1   |   9   | Wanted to say thanks...
|   2   |    1   |   7   | Cool I like tha.....
|   3   |    2   |   3   | Great seeing ya....
|   4   |    2   |   6   | Had a great....
|   5   |    2   |   2   | Don't sweat it man...

xref_PostCom
xrefkey | pageid | pstkey | comkey | comkey2 |
----------------------------------------------
|   1   |   1    |   1    |  NULL  |   NULL  | Post1 on Page1
|   2   |   1    |   1    |   1    |   NULL  | Comment1 under Post1
|   3   |   1    |   1    |   2    |   NULL  | Comment2 under Post1
|   4   |   2    |   2    |  NULL  |   NULL  | Post2 on Page2
|   5   |   2    |   2    |   3    |   NULL  | Comment3 under Post2 on Page2
|   6   |   2    |   2    |   4    |   NULL  | Comment4 under Post2 on Page2 (a second Comment)
|   7   |   2    |   2    |   4    |    5    | Explained below....
Comment key 5 is matched with comment key 4....under post2 on Page 2


1 commentaires

Pouvez-vous dire quel est l'avantage de cela? Tout ce que je vois, c'est que je dois faire plus de jointures ...



2
votes

Pour afficher des réponses dans les réponses, vous devrez faire un appel récursif pour continuer à générer les sous-réponses.

quelque chose comme p> xxx pré>

, Utilisez CSS. p>

<style type="text/css">
.comment_body {
    margin-left:10px;
}
</style>


0 commentaires