Задавайте вопросы, мы ответим
Вы не зашли.
Допустим есть таблица
ITEMS(ID, PARENT_ID,NAME)
нужно вывести список в виде
item 1
item 1.1
item 1.2
item 2
item 2.1
item 2.2
item 2.3
В Oracle есть sys_coonect_by_path, в MS SQL я это делаю рекурсивным вызовом процедуры. В MySQL рекурсивные вызовы запрещены или выключены по умолчанию. Есть ли какое то оптимальное решение для MySQL
Неактивен
SET max_sp_recursion_depth = 10;
Оптимальное решение - отдельная табличка с родственниками или хранение индекса
обхода, а вовсе не хранимые процедуры
Неактивен
SET max_sp_recursion_depth = 10;
MySQL 5.0.22
Unknown system variable 'max_sp_recursion_depth'
О чем и речь.
А хранение и поддержка индекса обхода как то гемморно.
Планирую так. Курсором пробежаться и накапливать данные во временную таблицу с хитрым SORT_ID, только вот пока тямы не хватает как его его сделать
Неактивен
Когда я гуглил по данной теме то натыкался на баг репорт на форуме MySQL, там говорилось что в ранних версиях 5.0.x они это вводили, потмо отменяли, потом опять вводили.
PS
Это должно работать у любых провайдеров с MySQL 5.0.x их веть не заставишь проапгрейдить их MySQL. Так что буду искать другое решение. А с рекурсией было бы красиво конечно.
Неактивен
Хранимые процедуры не работают вообще в 5.0.0 - тем не менее хостинг может заявлять,
что на нем стоит "пятый" MySQL... Нужно подходить разумно к проблеме, 5.0.22 - это старый
сервер, двухлетней давности, его даже на зеркалах нету уже
Неактивен
Не захотелось ограничивать уровень рекурсии, всё таки придумал решение на временных таблицах. Столкнулся с ограничением что на временную таблицу нельзя ссылаться дважды в одном запросе, пришлось вводить дополнительные. Такой вот монстр получился
Неактивен
Почему нельзя ссылаться дважды? Можно так же, как и всегда, через алиасы:
SELECT * FROM tablename a, tablename b;
Неактивен
В документации по 5.0 было сказано
You cannot refer to a TEMPORARY table more than once in the same query. For example, the following does not work:
mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'
На 5.0.22 не работало, на 5.0.67 работает. Спасибо за информацию.
PS
Да, MySQL разработчики странные ребята. В вресии меняется только цифра третьего звена, а изменений как в major update.
Неактивен