Добрый день уважаемы форумчане, профессионалы и любители, а так же все остальные пользователи!ВведениеУже который час не могу сообразить, как мне лучше сделать (собрать воедино), решил обратиться сюда за помощью. Пишу программу для отображения сборок деталей. Каждая сборка содержит в себе расходные материалы (имеющие свой шифр), а также другие сборки поменьше, которые, в свою очередь, тоже содержат в себе расходные материалы (части). ПроблемаОписанное выше я решил простым способом: В цикле частей для сборки я определял сборки поменьше и добавлял их в массив, затем создал цикл из количества подсборок в массиве и соответственно запрос на части подсборок. Казалось бы всё, проблема решена! Но нет. Оказывается, подсборки тоже могут собираться из других сборок поменьше, а те в свою очередь могут собираться из частей и подсборок еще меньше. Итого уровней может быть 3-4, как мне сказали заказчики. Да, я мог бы сделать 4 цикла подцикла и тд. Но это лишняя работа кода, и к тому же если уровней станет больше? Это не годится. ОписаниеСуществует 2 таблицы: Сборка назовем ее условно SB; Шифр - SH. Таблица SB проста как QBASIC, а именно: id nsb sh pr, где id - счетчик; nsb - номер сборки; sh - шифр материала ( который может являться и сборкой тоже); pr - применяемость (сколько необходимо sh для nsb).Таблицу SH мы рассматривать не будем, там только описание (расшифровка номеров), так же в этой таблице указаны все сборки, они отмечены специальным индексом. Эта таблица завязана в запросе, тут мы ее завязывать не будем. Нужно понимать что именно из-за этой таблицы я узнаю где сборка а где материал. Как сейчас сделаноПриходит номер сборки $nsb, необходимое количество $kol. Далее запрос на вывод SB.sh и SB.pr из таблицы SB где SB.nsb = $nsb В цикле вывода идет запись в массив сборок array_push($mass_sh, $Rsbrow_TITLE); Далее определяем количество записей в массиве $n_mass_sh = count($mass_sh); Делаем запрос в цикле до $n_mass_sh в запросе выводим части из которых собираются подсборки. РассужденияВ принципе, я могу скопировать это 5 раз (сделать 5 вложений циклов). Но это будет неправильно и некрасиво, более того, это будет сложно даже видеть . Я уверен, что существует выход из такой ситуации. Помогите.
Рекурсия классическая. Посмотрите задачу с сканированием дерева каталогов (когда каждый элемент каталога - либо файл, либо каталог), она много где решена, здесь примерно та же фигня будет. Конечно, не хорошо в рекурсивной функции делать запросы, но тут, по ходу, ничего другого не придумать.
Да это бы подошло, но для этого мне необходимо будет переделать все базы которые существовали до меня по 10к позиций. --- Добавлено --- Я попробую, может что и получится. Спасибо за ответ!
Лучше бы ты просто показал код и вкратце сказал, что он делает... А то из того что ты написал... Сложно понять... Можно, но сложно.
Код большой, с множеством таблиц помимо этих двух, Что бы его показать мне пришлось бы его упрощать. Мне показалось это дольше чем объяснить все "на пальцах". Пользователь mkramer походу понял меня. Я почитал о рекурсивной функции, это реализуемо и думаю это подойдет. Но еще не приступал к выполнению. Если интересно я могу отписаться с результатами.
Ну что господа! Рекурсивная функция получилась. Все просто шикарно работает. Осталось только оформление заделать=) Спасибо за помощь