Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Самопис для форума [13]
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DelphinPRO пишет:
Как вам запросик для получения корневых форумов?
Кошмар. Я серьёзно. Это использовать категорически нельзя.
Даже для тяжёлого OLAP весьма жуткий план, а для OLTP самоубийственен.
----- PostgreSQL DBA
DelphinPRO
Отправлено: 30 Июня, 2015 - 12:39:58
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Я понимаю, что кошмар. SQL - мое слабое место.
А как еще получить количество всех вложеных тем/постов?
----- Чем больше узнаю, тем больше я не знаю.
Мелкий
Отправлено: 30 Июня, 2015 - 13:04:35
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Данные это горячие, нужны часто - потому на лету их считать вообще не вариант.
Нужно обновлять счётчик при записи.
Быстро, зато с риском в итоге разойтись - делать +1 или -1
Медленнее, но точнее - пересчитывать целиком
Быстрый и довольно точный гибрид - +-1, периодически пересчитывать чистовые данные.
Можно обойтись только силами БД. Тут нужно мнение архитектора, где будет размещена логика. Я, честно говоря, уже не помню, какие начальные цели обрисовывал DeepVarvar
----- PostgreSQL DBA
DelphinPRO
Отправлено: 30 Июня, 2015 - 13:52:13
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
т.е. либо в таблицу форумов добавить поле count_posts и изменять его при добавлении/удалении постов во всех подфорумах, либо добавить поле forum_id в таблицу постов, которое будет изменяться только при перемещении постов (объединении/разделении тем). Но во втором случае все равно будет подзапрос
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DelphinPRO пишет:
в таблицу форумов добавить поле count_posts и изменять его при добавлении/удалении постов во всех подфорумах
Именно.
При том, понадобится ещё иерархическое обновление:
счётчики нужны в таблице форумов, в таблице подфорумов и счётчик ответов в таблице тем.
При написании ответа (а так же удалении и перемещении) надо обновить счётчик постов в теме, счётчик постов в подфоруме, счётчик постов в таблице форумов.
----- PostgreSQL DBA
MiksIr
Отправлено: 30 Июня, 2015 - 14:55:51
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
и счетчик постов в таблице пользователей ;)
На самом деле, если все это нормально закапсулировано - абсолютно пофиг как это будет сделано "сейчас".
Я последнее время склоняюсь к тому, что стоит меньше делать денормализации в базе и переносить ее на кеш прослойку.
----- self-banned
DeepVarvar
Отправлено: 30 Июня, 2015 - 15:01:43
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
DelphinPRO пишет:
в таблицу форумов добавить поле count_posts
Оно там было, только, я удалил на сейчас лишние поля.
Так еще и сам забыл и психанул и тоже такой запрос написал как у дельфина ))
Надо будет пофиксить. (Добавление)
MiksIr пишет:
и счетчик постов в таблице пользователей ;)
Лучше сделать отдельную forum_users и туда писать, т.к. пользак может быть удален, а посты остаться, может он что полезное писал.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
DeepVarvar пишет:
т.к. пользак может быть удален
Из таблицы удален? Зачем? Стандартно - флаг "deleted" и вся инфа останется для внутренних нужд.
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 30 Июня, 2015 - 16:09:21
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Флаг это в статусах, там есть поле статус.
Ну и если думать глобальнее, то форум можно рассматривать как модуль, тогда все что касается личных настроек пользака на форуме и вот этих вот счетчиков (посты, шкор, подпись) -- всетаки лучше закинуть в отдельную таблицу.
Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007 Откуда: Симферополь
Помог: 98 раз(а)
Вот пару больших проектов на гитхабе https://github.com/piwik/piwik/issues, https://github.com/videojs/video.js/issues.
Понажимайте milestones, labels. Все автоматизированно(ну кроме тестов) вплоть до релизов.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Нормальный стек для фронтенда настроим? gulp, bower, sass, etc...
----- Чем больше узнаю, тем больше я не знаю.
DeepVarvar
Отправлено: 30 Июня, 2015 - 21:25:08
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Ну допустим.
Я знаю ты любишь.
А если тебя не будет в момент когда надо внести правки?
Я вот например с этими грунтами-гульфиками-сасами-лесам и никогда не работал.
Ну да, будет повод разобраться.
Это я все к чему -- ты перечислил все в куче как выбор?
А что именно ты хочешь воткнуть?
(Добавление)
Добавил табличку форумных пользаков.
Добавил поле счетчика постов в топике.
Привел к общему виду именование некоторых других полей в таблицах.
Пофиксил багу в расчете пагинации.
Поправил хелперы-модельки под новые запросы.
Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011 Откуда: Москва
Помог: 221 раз(а)
Было-бы не плохо, если бы вместо textarea был ckeditor с возможностью вставки кода, который подсвечивается тут же и можно редактировать с автокомплитом ))
Например вот плагин codesnippet: http://sdk[dot]ckeditor[dot]com/samples/codesnippet[dot]html
Только в нем вызывается окно с кодом.
Вот к нему и прикрутить codemirror.
Будет и подсветка, и форматирование, и автокомплит.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.