Mysql помощь - Форум успешных вебмастеров - GoFuckBiz.com - Страница 4
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB89.7026
BTC/USD68020.6856
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 26.01.2013, 14:57
Start Post: Mysql помощь 
  #31
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию

Нужно выбрать коменты по ID и ответы на них (PID) и отсортировать по дате добавления главного сообщения.

Есть таблица.
Цитата:
id | message | pid | date
Но еще есть LIMIT 20 OFFSET 100 (постраничный вывод коментов).

Короче должно быть так:
1. Главное сообщение (дата 01.2013)
- комент (дата 12.2012)
- комент (дата 10.2012)
- комент (дата 05.2012)
- ...
2. Главное сообщение (дата 12.2012)
- комент (дата 01.2013)
- комент (дата 11.2012)


Ну и так далее. В таблице они идут все под своим id. Обратите внимание на даты. Выборка идет с LIMIT и OFFSET.

Пример коментов вот тут http://www.drive2.ru/users/mersbrabus/blog/246513/#post
Только мне нужно в обратном порядке (новые сверху).

Последний раз редактировалось Hector; 26.01.2013 в 15:04.
Hector вне форума  
Старый 27.01.2013, 12:31   #32
Drunk Monk
Je suis moine ivre
 
Аватар для Drunk Monk
 
Регистрация: 03.03.2009
Сообщений: 15,268
Бабло: $797172957
По умолчанию

Как правило, сдвиг заканчивается на 3-5 шаге и дальше более глубокие каменты не сдвигаются. Но формально вложенность остается, чтобы понимать, кто на что ответил.
Drunk Monk вне форума  
Старый 27.01.2013, 12:32   #33
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
ТС -->
Отправить сообщение для Hector с помощью Jabber
автор темы ТС По умолчанию

Boodda, это от дизайна зависит. Можно не сдвигать а делать вывод что это ответ васи на сообщение пети. Я пример привел с драйва ру. Вообще тема деревьев интересная и сложная.
Hector вне форума  
Старый 27.01.2013, 13:21   #34
huanpedro
Сеньер Член
 
Аватар для huanpedro
 
Регистрация: 03.04.2010
Сообщений: 1,738
Бабло: $280230
По умолчанию

Offtopic
huanpedro вне форума  
Старый 27.01.2013, 13:41   #35
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от Boodda Посмотреть сообщение
В MySQL нет типа полей ARRAY. Вот и начинаются танцы с бубном вокруг того как же селектить.
Цитата:
Сообщение от Boodda Посмотреть сообщение
у вышестоящего комента запоминаем ID подчинённых комментов в поле с типом ARRAY
не вижу _принципиальной_ разницы между этим ARRAY postgresql и строкой с ID, склеенных разделителем. Возможна обработка на языке SQL попроще. Сам же алгоритм основывается на тех же принципах, в твоем случае это: Adjacency List + Materialized Path

Adjacency List - потому что хранишь связь наследник-родитель
Materialized Path - потому что в родителе хранишь всех наследников, что по сути и есть алго MP, хотя в классическом MP можно сразу выбрать ветку со всеми вложенностями одним запросом, тебе же нужна рекурсия, либо во всех родителях хранить всех наследников на каждых уровнях - это ад

У MP проблемы в перемещении узла, но в данной задаче перемещений наверно и не будет. Поэтому имхо тут MP лучшее решение, если говорить об алгоритмах обработки данных. Еще раз упомяну эту статью, в ней описано подробно 3 алгоритма, лучше чем по другим приведенным ссылкам.

С точки зрения выбора БД, если бы не веб (а может и веб), я бы глянул на exist-db - native xml database.
XML - это как раз иерархическая структура в текстовом виде, они(exist-db) то уж точно знают как с этим работать - см. язык запросов xquery

Цитата:
Сообщение от dady
chesser, большинству здесь нужно "лиж бы работало", а как оно работает пофиг. Я тоже склоняюсь к такому принципу, ибо если делать всё по уму на другое не останется времени) (Если конечно ты не профильный проггер и это твоя работа а не инструмент для помощи в основной работе)
ну это понятно, но от процесса поиска того самого идеального решения, я уверен, посетителям топика хуже не станет.
Про "лиж бы работало" - ну это рекурсия и 100500 запросов, а потом все переписывать с нуля, когда траф сайт уложит спать. Почему это произойдет? - потому что комменты, скорее всего, - это одна из наиболее популярных сущностей в БД, имеющая большое количество объектов, которое постоянно будет расти со временем жизни сайта. Комменты могут появляться новые, дополняя сложившееся дерево - значит кешировать их не правильно, либо сложнее обычного.
Прибавление 100500 запросов для загрузки страницы - это плохо, т.к. страницу будут дергать все, кому не лень, включая назойливых ботов. Если вдруг в таблице есть какой-нибудь каунтер (часто любят напихать таких полей), который считает статистику, или обновляет какой-нибудь статус комментов и тд, то это сделает невозможным использование кеша на уровне БД, а он частенько выручает, оттягивая конец сайта на чуть_позже. Коммент - это blob- поле? если да, то при построении join-ов таблицы будут строиться на диске(если не зарулить на tmpfs), вместо памяти. Ну и вообще, комменты - это та часть функционала, которая должна быть вылизана и работать без косяков.

я бы на MP делал + анонимам кешированную статику, зареганным один запрос по MP, возможно, тоже кешировать группы объектов и + механизмы(триггеры) ребилда кеша

а неее, не так, я бы дискус/вконтакте/фейсбук комменты повесил и не парился, щас это модно, гугл/яндекс любит, юзерам тоже норм. хз зачем самому этим заниматься. Меньше кода - меньше багов, нет кода - нет багов
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума