Реклама на сайте Advertise with us

Снова sql запрос

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 19/10/08 в 20:27       Ответить с цитатойцитата 

основная таблица БД - древовидная структура
можно как то посчитать количество элементов в ветках (подкатегориях) в одном запросе.
пока получется так, что обхожу все дерево, выдергивая id узлов
потом перебирая в массиве делаю COUNT(*) каждой ветки.
ну плюс еще по некоторым полям идет WHERE
есть менее ресурсоемкий путь?

крипта на ByBit

0
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 19/10/08 в 20:50       Ответить с цитатойцитата 

Так может у тебя неправильная структура. Любое дерево любой вложенности можно записать ввиде полей id и pid. Где id - номер записи, pid - номер родительской записи. А посчитать это элементарно с помощью COUNT(*) ... GROUP BY pid

создай свою партнёрку

8
 

Гражданин планеты Земля

С нами с 30.03.03
Сообщения: 7217
Рейтинг: 2185

Ссылка на сообщениеДобавлено: 19/10/08 в 21:11       Ответить с цитатойцитата 

SELECT DISTINCT `id`, COUNT(`какое-нить поле ветки`) FROM .... GROUP BY `id`

Гыыы

8
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 19/10/08 в 21:32       Ответить с цитатойцитата 

рекурсивные стореные процедуры, функции рулят. но рулят на MS SQL, в мускуле же можно сделать рекурсию скорей всего, но сама реализация стореных процедур и функций гуано.

8
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 19/10/08 в 22:51       Ответить с цитатойцитата 

может немного неправильно объяснил
дерево такое: _http://phpclub.ru/detail/article/db_tree
pid а как такового нет
подсчет идет не прямых потомков, а потомков потомков (2 уровень вложенности)
дерево обсчитывается по кругу

крипта на ByBit

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 19/10/08 в 23:24       Ответить с цитатойцитата 

Говорю, дерево обходить это рекурсия нужна. Я не знаю, можно ли это сделать в стореной процедуре мускуля, но в пхп это где то так:
Код:

function dbcount($pid) {
$count=0;
$db->Select("SELECT pid FROM pids WHERE ref_pid=$pid");
while ($row=$db->fetch()) {
  $count+=dbcount($row['pid']);
}
$count+=$db->Select("SELECT count(*) FROM pids WHERE ref_pid=$pid");
return $count;
}

В MS SQL это было просто, там User-Defined Functions могли возвращать таблицу. Делаешь просто селект из функции, которая делает селект из самой себя по всем коленам да и все.

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 19/10/08 в 23:29       Ответить с цитатойцитата 

ну в принципе это тоже, что я и делаю сейчас
в несколько запросов, насколько я тебя понял

крипта на ByBit

0
 

Криптопохуист

С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019

Ссылка на сообщениеДобавлено: 19/10/08 в 23:33       Ответить с цитатойцитата 

Вроде программист а что такое рекурсия не знает icon_smile.gif

Рекурсия это когда функция вызывает сама себя до определенного условия. В твоем случае условие - плюсовать пока не закончатся потомки на текущем уровне.

function count_children($foobar) {
...
return count_children($barfoo);
}

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »