Внимание!
Не все расширения для phpBB 3.2 совместимы с phpBB 3.3, главным образом из-за неверного синтаксиса в определениях сервисов (отсутствия обрамляющих кавычек - '...').
Перед обновлением необходимо убедиться в совместимости всех расширений.
Рекомендуется предварительно тестировать обновление на копии конференции (локально или на сервере).

left_id и right_id - таблица phpbb_forums

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
stashappy
phpBB 1.2.0
Сообщения: 13
Стаж: 7 лет
Благодарил (а): 3 раза

left_id и right_id - таблица phpbb_forums

Сообщение stashappy »

Добрый вечер. У меня вопрос относительно ячеек БД - left_id и right_id, в таблице phpbb_forums. Получается так, что когда администратор добавляет к себе на сайт новый форумный раздел, то все остальные имеющиеся значения, в этих ячейках, заного пересчитываются и обновляются с помощью sql запроса. Что в свою очередь не поддается логике. Зачем так делать? К тому же это оказывает влияние на производительность. Зачем надо было только из-за одного форумного раздела, менять значения во всех других форумных разделах? А если этих разделов в базе очень много, то пересчёт доставляет некоторое неудобство. Это еще не учитывая подфорумы. А если и с ними, то алгоритм просчета меняется.. Усложняется в разы.. Я вот думаю, если вы будете делать 4 версию движка, то может всё же исправите данное недоразумение и продумаете алгоритм, сделав его проще?..

Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 10323
Стаж: 10 лет 6 месяцев
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 1379 раз
Поблагодарили: 1309 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение Пчелкин »

stashappy писал(а):Зачем надо было только из-за одного форумного раздела, менять значения во всех других форумных разделах?
Тебе это приснилось. Иды форумов никогда не меняются...с чего ты это взял?

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11592
Стаж: 13 лет 5 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2624 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение Sheer »

Пчелкин писал(а):Иды форумов никогда не меняются
Меняются.
stashappy писал(а):Что в свою очередь не поддается логике
Поддается. Это сделано из-за иерархической древовидной структуры форумов.
stashappy писал(а):всё же исправите данное недоразумение и продумаете алгоритм, сделав его проще?
Ну если придумаете проще, получите Нобелевскую премию по математике.

Добавлено спустя 1 минуту 23 секунды:
Иерархическая модель данных
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 10323
Стаж: 10 лет 6 месяцев
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 1379 раз
Поблагодарили: 1309 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение Пчелкин »

Sheer писал(а):Меняются.
Как меняются? На одном форуме создавал 550 подфорумов...Удалили потом средние...так иды у оставшихся и остались в разброс...с пропусками...и остались и никаким репарсингам не подчиняются...я вот ничего не понял...
Да и на других они намертво держатся... в шоке...

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15183
Стаж: 14 лет 2 месяца
Откуда: Красноярск
Благодарил (а): 390 раз
Поблагодарили: 1772 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение rxu »

Иидентификаторы самих форумов не меняются. Значения left_id, right_id, само собой, должны меняться, ибо определяют структуру дерева форумов.
Это нормальный алгоритм, никакой потери в производительности он не дает, так как изменения происходят только при администраторских операциях с форумами, и исправлять там нечего.
Изображение

stashappy
phpBB 1.2.0
Сообщения: 13
Стаж: 7 лет
Благодарил (а): 3 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение stashappy »

Значения left_id, right_id, само собой, должны меняться, ибо определяют структуру дерева форумов.
Это нормальный алгоритм, никакой потери в производительности он не дает, так как изменения происходят только при администраторских операциях с форумами, и исправлять там нечего.
Как это можно назвать нормальным алгоритмом, если при удалении или добавлении нового форумного раздела, обновляются ячейки left_id и right_id во всех остальных форумных разделах. А если их будет много! В своей практике, я такой подход вижу впервые. Надо полностью пересматривать алгоритм распределения иерархической структуры форумных разделов. Не гоже, из-за одного созданного или удаленного форумного раздела, переписывать значения всех других форумов.

Аватара пользователя
Smayliks
Поддержка
Поддержка
Сообщения: 2207
Стаж: 15 лет 4 месяца
Откуда: {postrow.POSTER_FROM}
Поблагодарили: 153 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение Smayliks »

Предложить другой вариант добавления нового форума с сохранение иерархии.

Добавлено спустя 58 секунд:
Я не требую написать код, предложите именно алгоритм.
//
// That's all, Folks!
// -------------------------------------------------

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11592
Стаж: 13 лет 5 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2624 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение Sheer »

stashappy писал(а):Как это можно назвать нормальным алгоритмом
Русским языком можно назвать. stashappy, вы специалист по алгоритмизации? Сомневаюсь, так вот давайте не будем судить о том, о чем не имеем ни малейшего представления.
stashappy писал(а):В своей практике, я такой подход вижу впервые.
У вас обширная практика? Тогда покажите алгоритм управления такой-же точно структурой без идентификаторов соседних элементов. Мне попадался, но там требуется две таблицы БД.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15183
Стаж: 14 лет 2 месяца
Откуда: Красноярск
Благодарил (а): 390 раз
Поблагодарили: 1772 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение rxu »

Sheer
Речь идет о том, что не нужно обновлять левый-правый идентификаторы для всех форумов, а обновлять только для тех, которые реально задействованы в изменениях.
Возможно, в этом есть резон, надо смотреть исходный код.
Изображение

Аватара пользователя
Sheer
phpBB Guru
phpBB Guru
Сообщения: 11592
Стаж: 13 лет 5 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2624 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение Sheer »

rxu писал(а):не нужно обновлять левый-правый идентификаторы для всех форумов
Именно так и происходит. Во всех не меняются
Создан форум категория. В ней два форума

Код: Выделить всё

id	parent left right
1	0		1	4		Ваша первая категория
2	1		2	3		Ваш первый форум
Добавляем второй форум-категорию

Код: Выделить всё

id	parent left right
1	0		1	4		Ваша первая категория
2	1		2	3		Ваш первый форум
3	0		5	6		Вторая
Добавляем во вторую два форума

Код: Выделить всё

id	parent left right
1	0		1	4		Ваша первая категория	
2	1		2	3		Ваш первый форум
3	0		5	10		Вторая	
4	3		6	7		Во второй	
5	3		8	9		Еще во второй
Добавляем в первую категорию форум

Код: Выделить всё

id	parent left right
1	0	1	6		Ваша первая категория
2	1	2	3		Ваш первый форум
3	0	7	12		Вторая
4	3	8	9		Во второй
5	3	10	11		Еще во второй
6	1	4	5		В первой
Теперь во Второй передвинем форум Еще во второй вверх

Код: Выделить всё

id	parent left right
1	0	1	6		Ваша первая категория
2	1	2	3		Ваш первый форум
3	0	7	12		Вторая
4	3	10	11		Во второй
5	3	8	9		Еще во второй
6	1	4	5		В первой
Добавлено спустя 14 минут 20 секунд:
rxu писал(а):надо смотреть исходный код.
Вот он

Код: Выделить всё

			if ($forum_data_sql['parent_id'])
			{
				$sql = 'SELECT left_id, right_id, forum_type
					FROM ' . FORUMS_TABLE . '
					WHERE forum_id = ' . $forum_data_sql['parent_id'];
				$result = $db->sql_query($sql);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				if (!$row)
				{
					trigger_error($user->lang['PARENT_NOT_EXIST'] . adm_back_link($this->u_action . '&parent_id=' . $this->parent_id), E_USER_WARNING);
				}

				if ($row['forum_type'] == FORUM_LINK)
				{
					$errors[] = $user->lang['PARENT_IS_LINK_FORUM'];
					return $errors;
				}

				$sql = 'UPDATE ' . FORUMS_TABLE . '
					SET left_id = left_id + 2, right_id = right_id + 2
					WHERE left_id > ' . $row['right_id'];
				$db->sql_query($sql);

				$sql = 'UPDATE ' . FORUMS_TABLE . '
					SET right_id = right_id + 2
					WHERE ' . $row['left_id'] . ' BETWEEN left_id AND right_id';
				$db->sql_query($sql);

				$forum_data_sql['left_id'] = $row['right_id'];
				$forum_data_sql['right_id'] = $row['right_id'] + 1;
			}
			else
			{
				$sql = 'SELECT MAX(right_id) AS right_id
					FROM ' . FORUMS_TABLE;
				$result = $db->sql_query($sql);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				$forum_data_sql['left_id'] = $row['right_id'] + 1;
				$forum_data_sql['right_id'] = $row['right_id'] + 2;
			}

			$sql = 'INSERT INTO ' . FORUMS_TABLE . ' ' . $db->sql_build_array('INSERT', $forum_data_sql);
			$db->sql_query($sql);

			$forum_data['forum_id'] = $db->sql_nextid();

			add_log('admin', 'LOG_FORUM_ADD', $forum_data['forum_name']);
		}
И как из него видно, затрагиваются не все форумы.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.

Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 10323
Стаж: 10 лет 6 месяцев
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 1379 раз
Поблагодарили: 1309 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение Пчелкин »

Sheer Вы гений дипломатии!!!!

Ой...кажется даж я понял всю экзекуцию вопроса...
Тогда топикстартеру вопрос - а у вас на форуме именно темы и сообщения пишут каждую минуту или новые форумы - подфорумы создаются каждые три секунды?
О чем вообще вы печетесь? Раз в месяц ВСЕ это МОЖЕТ БЫТЬ пересчитается и устаканится и все.... Больше ЭТОГО пересчета и не будет...Какие проблемы?
Если же есть просто желание порепетировать созданием категорий, форумов , подфорумов - делайте это на Денвере....Никто не будет ЭТОГО замечать...и делаться будет в миллион раз быстрей...

Аватара пользователя
nissin
phpBB 3.0.4
Сообщения: 2191
Стаж: 12 лет 7 месяцев
Откуда: Павлодар
Благодарил (а): 7 раз
Поблагодарили: 340 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение nissin »

http://habrahabr.ru/post/46659/
Деревья в базах данных можно хранить тремя основными методами: Adjacency List, Matherialized Path и Nested Sets.
Adjacency List — когда у нас родитель хранится в колонке типа parent_id: ''1''
Matherialized Path — полный путь до элемента хранится в колонке типа path: ''1.2.5''
Nested Sets — пара колонок left_id и right_id, хранящие диапазон всех вложенных элементов, например, корень дерева из 9 элементов будет иметь левое значение ''1'', а правое — ''18''
Какой вариант предлагает использовать ТС?
Всё повторяется. nurlan.info

Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Стаж: 10 лет 8 месяцев
Благодарил (а): 41 раз
Поблагодарили: 455 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение Pazh »

nissin писал(а):Adjacency List — когда у нас родитель хранится в колонке типа parent_id: ''1''
очень простой в понимании метод, НО sql оператор для его использования есть только в ORACLE -

Код: Выделить всё

select * from table connect by prior parent_id=id start with id=XXX
- одним запросом можно получить полное дерево в любом направлении
stashappy похоже не понял что id форума не меняется - это ключевой параметр, а left_id и right_id - это периферийные параметры, используемые только для построения дерева и нигде как внутри php-кода не светятся
форум ЖК Вестердам Помощь в ЛС/email только за WM или ЯД

stashappy
phpBB 1.2.0
Сообщения: 13
Стаж: 7 лет
Благодарил (а): 3 раза

Re: left_id и right_id - таблица phpbb_forums

Сообщение stashappy »

stashappy похоже не понял что id форума не меняется
А мы разве обсуждаем id? Прочтите внимательно заголовок темы. Насчет id и так понятно. Он не меняется.

Sheer. Конечно, спасибо, за то что вы расписали и даже в табличном виде, принцип работы. Но это я и так давно сам разобрал.
Я не требую написать код, предложите именно алгоритм.
Почему я что-то должен Вам предлагать? Мне за это награду не дадут, медаль не вручат. Я лишь выразил своё личное мнение, по поводу алгоритма формирования древовидной структуры на движке PhpBB3.
Русским языком можно назвать. stashappy, вы специалист по алгоритмизации? Сомневаюсь, так вот давайте не будем судить о том, о чем не имеем ни малейшего представления.
А вы у нас экстрасенс или телепат? Как это вы судите о человеке, не имея о нём ни малейшего представления и не зная его в частности. Это глупости какие то. Впрочем, если честно, меня это не заботит...

У меня вот такой вопрос. С помощью скрипта, добавил на форум где-то порядка 2500 форумных разделов. Проверил left_id и right_id - просчиталось всё верно. Но, сам форум стал ужасно тормозить. В какую страницу не захожу, всё тормозит. Решил сначала, что проблема на сервере. Оказалось нет. Получается, 2500 разделов это уже перебор для движка PhpBB3?

Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 10323
Стаж: 10 лет 6 месяцев
Откуда: От Москвы 9 часов на Боинге
Благодарил (а): 1379 раз
Поблагодарили: 1309 раз

Re: left_id и right_id - таблица phpbb_forums

Сообщение Пчелкин »

Где то как-то видел 1250 - потолок
тем 500 000 - потолок
постов - до 2 500 000 - потолок..где - не помню...
юзеров - 1 000 000 потолок...

Вернуться в «Поддержка phpBB 3.0.х»