|
|
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток вам! Насколько я понял, рекурсию простым запросом не реализовать, и надо писать хранимую процедуру(функцию) для этого. В этом и прошу собственно у вас помощи. Древовидная структура, поля id и top отвечают за дерево, есть некое поле isgroup. так вот, надо посчитать количество записей, у которых isgroup равно 3, начиная от указанного id вглубь дерева маленький пример Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 07:19:19 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
хорошо бы глубина груп была бы небольшая фиксированая. Что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 09:41:19 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
не, каталог бесконечный ваще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 10:58:29 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 11:50:25 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
спасибо, но при попытке сделать Код: plaintext может прав не хватает у юзера? или в функции дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 12:05:36 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
хотя у себя из под рута выполнил, прав навалом, то же самое сказал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 12:20:35 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
рекурсивно процедуру нельзя вызывать в mysql, делайте через цикл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 12:29:35 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
пожалуйста поясните, как, немного в мускуле понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 12:34:23 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
что как? цикл написать? http://dev.mysql.com/doc/refman/5.0/en/while-statement.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 12:35:41 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
я думал эту функцию как то по другому запустить. смысл писать тогда рекурсивные функции, если их нельзя запускать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:30:15 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Nick Anikinрекурсивно процедуру нельзя вызывать в mysql, делайте через цикл Можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:35:09 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
xelaok Nick Anikinрекурсивно процедуру нельзя вызывать в mysql, делайте через цикл Можно помогите уже ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:39:34 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvov xelaok Nick Anikinрекурсивно процедуру нельзя вызывать в mysql, делайте через цикл Можно помогите уже ))) Через процедуру делай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:45:26 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:57:37 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvov Код: plaintext 1. 2. хз, у меня тока так получилось: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 14:26:51 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Попрошу кинуть в меня камнем за этот вариант. Перед тем как ловить камень поясню, рекурсия имеет обыкновение падать при определенном уровне вложенности, а этому абсолютно пофиг. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 14:44:37 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
MAPA3OTПопрошу кинуть в меня камнем за этот вариант.зачем же камнем? я сразу написал - лучше через цикл переделать :) MAPA3OTПеред тем как ловить камень поясню, рекурсия имеет обыкновение падать при определенном уровне вложенности, а этому абсолютно пофиг.в mysql даже специальный параметр есть - max_sp_recursion_depth ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:14:26 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
xelaok Nick Anikinрекурсивно процедуру нельзя вызывать в mysql, делайте через цикл Можнода, я неправильно написал, имел ввиду функцию - как хотел автор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:15:13 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
вообщем скрипт Nick Anikin выдал что Recursive limit 0 (as set by max_sp_recursion_depth variable) was exceeded by routine go max_sp_recursion_depth надо увеличить? как его указать явно? Код: plaintext скрипт MAPA3OT'a на небольшой вложенности работает верно, а на большой - нет. В архиве дамп базы. Если считать фотки экскаваторов Код: plaintext А если считать самосвалы Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:22:11 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Nick Anikinв mysql даже специальный параметр есть - max_sp_recursion_depth Все равно есть максимальное ограничение (255), после которого даже изменение этого параметра не спасет. Опять-таки, если нас устроит некое значение в пределах от 0 до 255, то мы ткнемся в некое подобие этого: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:28:56 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
даже твой скрипт работает быстрей чем та же рекурсия на пхп. еще бы верно посчитала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:34:00 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
MAPA3OTПопрошу кинуть в меня камнем за этот вариант. Перед тем как ловить камень поясню, рекурсия имеет обыкновение падать при определенном уровне вложенности, а этому абсолютно пофиг. Минус один - многократный фуллскан таблицы (по числу вложенных уровней), т.е. тормоза ... как вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:37:16 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
skol, повис мускуль, 99 процентов нагрузки на камень ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 15:52:16 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvov, индекс на top установи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:09:59 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
дак поставил перед тем как выполнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:13:10 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvov Код: plaintext Так напиши: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:18:59 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvovвообщем скрипт Nick Anikin выдал что Recursive limit 0 (as set by max_sp_recursion_depth variable) was exceeded by routine go max_sp_recursion_depth надо увеличить? как его указать явно? Код: plaintext скрипт MAPA3OT'a на небольшой вложенности работает верно, а на большой - нет. В архиве дамп базы. Если считать фотки экскаваторов Код: plaintext А если считать самосвалы Код: plaintext Ай-ай-ай, а врать не хорошо, что вернет этот запрос? Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:43:33 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
MAPA3OT djvov Хотя, стоп, отставить, у вас точно такая функция? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:50:30 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
skol[ Минус один - многократный фуллскан таблицы (по числу вложенных уровней), т.е. тормоза Фулскан - действительно тормоз прогресса, но я пока не понимаю как без него ибо ваша функция к сожалению сложится (должна сложиться) на больших объемах данных, substring при работе с blob - проще сразу повеситься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 16:53:46 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
MAPA3OT skol Ну и еще один плевок в вас (я очень раздражительный перед похмельем), сравните: допусти по всем уровням вложенности (пусть будет 10) всего 150 записей. а теперь сравните - полный перебор таблицы 10 раз со 150-ю быстрыми запросами. Мне кажется, вы проигрываете в скорости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 17:04:11 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Мегазапрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 19:45:46 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Немного оптимизировал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 19:51:09 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Кстати о пти4каx. Если каталог довол;но стабил;ний, то можно полухеные зна4ения записать в новой колонке. Ина4е рыскать каждый раз -- сервер загнется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 21:03:11 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
MAPA3OT MAPA3OT skol Ну и еще один плевок в вас (я очень раздражительный перед похмельем), сравните: допусти по всем уровням вложенности (пусть будет 10) всего 150 записей. а теперь сравните - полный перебор таблицы 10 раз со 150-ю быстрыми запросами. Мне кажется, вы проигрываете в скорости. Зависит от размера таблицы, от количества уровней и от реализации FIND_IN_SET. Для небольшого количества уровней / небольшой таблицы ваш метод выгодней (я применяю близкий метод, но с клиента (пых)) Опять же, 150 быстрых запросов в хранимке это совсем не тоже самое, что 150 запросов с клиента. Теперь последний камень ;-) - у вас постепенно набирается множество всех узлов со всех уровней, если же, как я упоминал, включить определение количества картинов в цикл, можно использовать множество только текущего уровня. Т.е. у вас в большинстве запросов часть возвращаемого результата дублирует то, что уже было известно. про реализацию на пыхе: здесь все можно сделать гораздо оптимальней: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 01:57:12 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
skol_at_home Сначала о грустном для меня, если честно, то сам предпочитаю искать с клиента, а не на сервере (фиг его знает, когда GROUP_CONCAT захлебнется, да и вообще сервак лишний раз мучать - бред) Теперь о веселом. Самое забавное, что мой метод рулит именно на больших объемах данных, но с маленьким числом уровней, не смотря на то, что мы по n-раз возвращаем одно и тоже. По поводу substring - вы меня вряд ли сможете убедить, ну тормознутый он, что тут сделаешь. А реализация Filed_in_set меня вообще не волнует, это мусевская родная функция и как она работает - проблемы муси, а не мои. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 02:05:49 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
О, а пока мы со skol пиписьками махались сзади тихо подошел xelaok и... xelaok, я так с вами не играю это не честно и вообще это должен был написать я А если честно, красиво, блин, и избегаем лишних проходов, и уменьшаем кол-во ненужной инфы, красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 02:11:14 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Еще немного посидел над запросом :) Более быстрый вариант с правильным запросом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Такой же, но без prepare/execute: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 10:40:35 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
xelaokЕще немного посидел над запросом :) Более быстрый вариант с правильным запросом: оба с одинаковой скоростью работают?) последний вариант спас мой сайт)) спасибо вам всем огромное, и с праздником!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 11:47:38 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
djvovоба с одинаковой скоростью работают?) неа, второй, без prepare, в раза 4 медленее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 11:58:38 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
xelaok djvovоба с одинаковой скоростью работают?) неа, второй, без prepare, в раза 4 медленее... а как замеряли? с помощью пхп я представляю как замерить скорость.. а с помощью одного мускуля как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 13:09:24 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
да, и правда, первый вариант быстрей, где то в 2-3 раза, говорит мой замер. единственное, что у меня не получилось его из пхп выполнить, а второй вариант нормально работает. Код: plaintext 1. 2. 3. 4. 5. 6. выдает пустую строку но если из клиента выполнять, то все верно говорит. Код: plaintext 1. 2. 3. 4. 5. 6. выдает количество нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 15:02:10 |
|
||
|
рекурсивная функция (процедура)
|
|||
|---|---|---|---|
|
#18+
Пример рекурсивного получения пути узла. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2015, 01:57:00 |
|
||
|
|

start [/forum/topic.php?all=1&fid=47&tid=1832577]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 344ms |

| 0 / 0 |
