Как хранить в базе комментарии второго уровня вложенности?

12
lutskboy
На сайте с 22.11.2013
Offline
187
460

Здравствуйте

Мне нужно сделать древовидные комментарии. Но я так прикинул, и понял что мне достаточно и второго уровня вложенности.

так вот вопрос у меня в том, как их хранить в базе, чтоб потом можно было легко достать.

что имеется ввиду легко достать. то что я сразу достаю их в нужном порядке. без всяких доп php функций которые формируют древо . и без выборки сразу всех комментов из базы как устроены многие готовые решения. а с возможностью limit

пример того что нужно на ютуб. только там вложенные открываются по клику. мне же нужно все выводить

Gerga
На сайте с 02.08.2015
Offline
94
#1

lutskboy, добавляете поле parent, в котором записываете id родителя.

lutskboy
На сайте с 22.11.2013
Offline
187
#2

и что с того. тогда мне нужно доставать сразу все комментарии чтоб сформировать все древо. и использовать дополнительно php функцию

вы похоже не дочитали до конца то я написал сверху

M
На сайте с 04.12.2013
Offline
223
#3

Зачем? Сортируйте в первую очередь по родителю (прямо в запросе). У комментов топового уровня можете указать родителем «себя».

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
S
На сайте с 30.09.2016
Offline
469
#4
lutskboy:
и что с того. тогда мне нужно доставать сразу все комментарии чтоб сформировать все древо. и использовать дополнительно php функцию

Чтобы сформировать дерево - да, все. Иначе какое дерево без веток?

Чтобы развернуть нить одного родительского комментария - все не нужны, достаточно знать id этого комментария. Чтобы первично выложить все родительские - нужно просто сделать выборку комментов с нулевым родителем (или с самим собой в качестве родителя, если делать как предложил miketomlin). Что Вам непонятно?

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
lutskboy
На сайте с 22.11.2013
Offline
187
#5

SELECT * FROM `comment` ORDER BY `parent_id` DESC LIMIT 30? так?

https://www.db-fiddle.com/f/45aW2rJk7idvPiXRnEdYCg/0 что то не то

M
На сайте с 04.12.2013
Offline
223
#6

Я же не просто так написал «в первую очередь» ;) Значит, предполагается еще и вторая :)

---------- Добавлено 05.08.2019 в 18:27 ----------


INSERT INTO `comment` (`id`, `parent_id`, `comm`) VALUES
(1, 1, 'comm 1'),
(2, 2, 'comm 2'),
(3, 2, 'reply 2'),
(4, 2, 'reply 2'),
(5, 3, 'reply 3'),
(6, 6, 'comm 6'),
(7, 2, 'reply 2'),
(8, 7, 'reply 7');
Восьмой коммент – это уже 3-ий уровень. Четко обозначил условия, а теперь начинаешь их обламывать – не хорошо :) Если ты это и подразумевал под вторым уровнем вложенности, тогда облом :)
S
На сайте с 30.09.2016
Offline
469
#7
lutskboy:
легко достать. то что я сразу достаю их в нужном порядке. без всяких доп php функций

Это из-за стремления к минимализму или из-за нелюбви к PHP? Программирование вообще-то не просто так придумано, а для удобной реализации алгоритма.

M
На сайте с 04.12.2013
Offline
223
#8

Sitealert, тут не только минимализм и т.п. А еще и эффективность.

lutskboy
На сайте с 22.11.2013
Offline
187
#9
Sitealert:
Это из-за стремления к минимализму или из-за нелюбви к PHP? Программирование вообще-то не просто так придумано, а для удобной реализации алгоритма.

думал есть простой обход поставленной задачи.

S
На сайте с 30.09.2016
Offline
469
#10
miketomlin:
А еще и эффективность.

Не всегда. По крайней мере, в данном случае речь точно не об эффективности.

---------- Добавлено 05.08.2019 в 17:58 ----------

lutskboy:
думал есть простой обход поставленной задачи.
А чем сложно сделать скриптом?

Здесь в принципе ущербная логика ставить LIMIT на общее количество выводимых комментов. Будут резаться нити ответов.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий