noder_ss
@noder_ss
Линуксоид-энтузиаст и SQL разработчик

Как реализовать ответы к комментариям?

У меня есть сайт с комментариями, хочу добавить туда возможность добавлять к ним ответы. Как я понял, для ответов нужна отдельная таблица, в которой будет храниться айди комментария. Как выводить их в нужное место? Был вариант считать количество комментариев и делать цикл, который выводит к каждому ответы, на правильном ли я пути?
В голове была мысль делать через джоины, но не уверен, что это было бы оптимизированным способом
  • Вопрос задан
  • 211 просмотров
Решения вопроса 2
Да, для ответов на комментарии обычно создают отдельную таблицу, в которой будет храниться айди комментария, на который был дан ответ. Это позволит связать ответы с их родительскими комментариями и выводить их в нужном порядке.

Чтобы вывести ответы на комментарий в нужное место, можно использовать рекурсию. То есть, для каждого комментария, нужно проверить, есть ли у него ответы, и если есть, то рекурсивно вызвать функцию вывода ответов, передав ей список ответов. Таким образом, ответы будут выводиться вложенными под комментарием, на который они были даны.

Пример кода на Node.js с использованием рекурсии:

function displayComments(comments) {
  comments.forEach(comment => {
    console.log(comment.text);
    if (comment.replies.length > 0) {
      displayComments(comment.replies);
    }
  });
}

// Пример использования
const comments = [
  {
    id: 1,
    text: "Комментарий 1",
    replies: [
      {
        id: 2,
        text: "Ответ на комментарий 1",
        replies: []
      },
      {
        id: 3,
        text: "Еще один ответ на комментарий 1",
        replies: [
          {
            id: 4,
            text: "Ответ на ответ на комментарий 1",
            replies: []
          }
        ]
      }
    ]
  },
  {
    id: 5,
    text: "Комментарий 2",
    replies: []
  }
];

displayComments(comments);


В этом примере функция displayComments принимает список комментариев и рекурсивно выводит их тексты и ответы. Если у комментария есть ответы, функция вызывает саму себя для вывода ответов.
Ответ написан
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Как совершенно справедливо заметил Akina, единственно что отличает ответ от корневого коментария - наличие родителя. По этому нет смысла плодить сущности, надо просто добавить одно-два поля. В зависимости от вида коментариев - 1 ветка(как на вк например) или ветвление (как на хабре), структура хранения может немного отличаться, но в целом это просто будет набор комментов, с указанием родителя (если родитель_айди = 0 или = айди, в зависимости от логики, то это корневой комент). Для разветвленных коментариев удобно добавлять айди ветки, по которой они будут группироваться, для 2 уровней это поле избыточно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы