Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчитать количество подчиненных элементов 
V
    Опции темы
neokortex
Дата 15.7.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



Есть таблица приблизительно такая:
Код

  "id" // ид элемента
  "parent_id" // ид  родительского элемента
  "name" // имя


Есть у меня вот такая простая выборка:
Код

SELECT * FROM `elements` WHERE `elements`.`id` = 0;

Все нормально работает. А как вывести еще и количество элементов, где parent_id = id текущего элемента.

Т.е. кол-во потомков каждого элемента в этой же таблице.
PM MAIL   Вверх
triclosan
Дата 15.7.2011, 13:32 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 3
Всего: 12



Код

SELECT e.id, e.field1, e.field2, e.field3, count(ch.id) as "children_count"
FROM element e 
left join element ch on e.id=ch.parent_id
WHERE e.id = 1
group by e.id, e.field1, e.field2, e.field3


Это сообщение отредактировал(а) triclosan - 15.7.2011, 13:44
PM MAIL   Вверх
Zloxa
Дата 15.7.2011, 13:54 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



triclosan,  smile 
Если отбор действительно идет по ПК, мне кажется коррелированный скаляр позволит сэкономить несколько спичек на сортировке
Код

SELECT e.id, e.field1, e.field2, e.field3, (select count(ch.id) from  element ch where e.id=ch.parent_id) as "children_count"
FROM element e 
WHERE e.id = 1




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
neokortex
Дата 15.7.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



спасибо
PM MAIL   Вверх
evilsoul
Дата 28.7.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



Хотелось бы узнать, насколько быстро или медленно будет работать ваша конструкция.

Скажем, если количество подчиненных элементов мы будем хранить в отдельном поле в главной таблице, ну и соответственно при вставке или удаление будем сами изменять это значение. Насколько такой вариант будет быстрее при выборке на больших объемах данных ?

Если есть опыт, подскажите.
PM MAIL   Вверх
Zloxa
Дата 28.7.2011, 13:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(evilsoul @  28.7.2011,  13:40 Найти цитируемый пост)
если количество подчиненных элементов мы будем хранить в отдельном поле в главной таблице, ну и соответственно при вставке или удаление будем сами изменять это значение. Насколько такой вариант будет быстрее при выборке на больших объемах данных ?

На выборке можно получить весьма существенное преимщуество. Преимущество тем больше, чем больше дочерних элеметов и чем меньше количество родительских. На модификации же такой поход, - даст существенную просадку. Дело в том, что такая реализация делает невозможной одновременную вставку двух дочерних элеметнов в различных сессиях. Конкурентные добвление, удаление дочерних элементов придется упорядочивать, иначе это грозит потерей согласованности.

Если модификация производится редко и конкуренция при модификации достаточно низка, такая оптимизация вполне уместна.

Это сообщение отредактировал(а) Zloxa - 28.7.2011, 13:59


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
evilsoul
Дата 28.7.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 31.3.2006

Репутация: нет
Всего: 0



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

Это сообщение отредактировал(а) evilsoul - 28.7.2011, 14:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0742 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.