Помощник
|
Запрос для рекурсивной функции, Не работает |
gaaarfild
|
Сообщение
#1
|
||
|
|
||
|
|||
ZiTosS |
24.7.2010, 12:57;
Ответить: ZiTosS
Сообщение
#2
|
|
gaaarfild, попробуй с тремя таблицами. Скорее всего, в моем понимании, ты пытаешься вытащить рекурсивно модули, родителями которых являются модули верхнего уровня.
Попробуй сделать запрос из трех таблиц, а лучше изобрази всё схематично, как ты хочешь получить (скриншот + photoshop) |
|
|
gaaarfild
|
Сообщение
#3
|
|
Визуально это должно выглядеть как иерархическое дерево. Использую рекурсивную функцию php.
|
|
|
ZiTosS |
25.7.2010, 13:51;
Ответить: ZiTosS
Сообщение
#4
|
|
gaaarfild, Ну понятное дело что не работает. Как ты пытаешься выбрать элементы относящиеся к родительскому?
Сам подумай, СУБД обрабатывает запрос проверяя каждую строку на выполнение условия. Смотрим: 1) Выбирается первая строка, допустим, условие a.id=b.mid выполняется, а второе a.id=a.parent не выполняется, т.к. элемент сам не может быть себе родительским, запись уже не выбирается 2) Выбирается вторая строка, допустим, условие a.id=b.mid выполняется, а второе a.id=a.parent не выполняется, т.к. элемент сам не может быть себе родительским, запись уже не выбирается И так далее. Вот что ты делаешь, получается, что ты делаешь неправильно. Тебе надо выстроить рекурсивное дерево? Куда помещаешь данные полученные из БД? |
|
|
gaaarfild
|
Сообщение
#5
|
|
В html. =)
|
|
|
ZiTosS |
25.7.2010, 14:22;
Ответить: ZiTosS
Сообщение
#6
|
|
gaaarfild, пока ничего не понял, но ошибку я тебе показал. Я строил рекурсивные деревья меню. Данные помещал в безразмерный массив.
Так же была рекурсивная функция, в которую я передавал массив, куда нужно занести дочерние элементы, и передавал id родительского, обрабатывался SQL и вытаскивались дочерние, они так же вызывали эту функцию, передавая в качестве параметров свои подмассивы и так далее. Скажи что нужно реализовать, сформулируй ТЗ! |
|
|
gaaarfild
|
Сообщение
#7
|
|
Это система прав. Права в отдельной таблице прописаны для каждого модуля и пользователя. Но некоторые модули - они подмодули родительских модулей.
И мне необходимо организовать древовидную структуру, чтобы назначать права для модулей и подмодулей. Когда не было иерархии, а были просто модули, все было без проблем. Но когда появился вопрос вложенности модулей, я впал в ступор. Пью уже третью неделю. Продал квартиру и машину. Живу в картонной коробке с ноутбуком. Скоро зарядка закончится. =)) |
|
|
ZiTosS |
25.7.2010, 23:26;
Ответить: ZiTosS
Сообщение
#8
|
|
gaaarfild, какого порядка может быть вложенность модулей?
Если у тебя вложенность не выше второго уровня, то есть, подмодули не могут быть родителями, то вот тебе рабочий запрос: [php]$result = $db->sql_query("SELECT a.id, a.module, a.title, a.rights, a.parent, b.read, b.add, b.edit, b.delete, b.right, b.seer, b.coord FROM ".$prefix."_modules AS a, ".$prefix."_mod_access AS b WHERE b.uid=".$user_id." AND (a.id=b.mid OR a.parent=b.mid) ORDER BY a.title");[/php] Права дочерним, будут присваиваться такие же как и у родительских. Вот что делает запрос: Выбираем поля id модуля, шифровка модуля, название, правила, родительский, права на чтение, добавление, редактирование, удаление и ещё что-то из таблиц прав доступа и модулей по условию все записи таблицы доступа, соответствующие определенному юзеру И (в этих записях доступа совпадают id модуля ИЛИ id родителя-модуля) сортировка... |
|
|
gaaarfild
|
Сообщение
#9
|
|
Вложенность нужна неограниченная. И права у каждого модуля свои собственные.
|
|
|
ZiTosS |
26.7.2010, 10:48;
Ответить: ZiTosS
Сообщение
#10
|
|
gaaarfild, Так если права у каждого модуля и подмодуля свои собственные, не понимаю зачем нужен такой запрос. Ведь если у тебя на каждый модуль хранятся права, то выбор по юзеру даст все модули.
А с большим количеством вложенности тебе нужно сделать примерно так: создание древовидного меню Создавай безмерный массив, или же одноуровневый, смотря как и что тебе надо. А затем егол используй. Создать подобный массив можно рекурсивно, запрашивая в рекурсии дочерние элементы по полученным id основных модулей. |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Партнерская программа для Эзотерики, Магии, Таро партнерка для эзотерики |
0 | LiveExpert | 273 | Сегодня, 15:13 автор: LiveExpert |
|
Партнерская программа для Эзотерики, Магии, Таро партнерка для эзотерики |
0 | LiveExpert | 257 | Сегодня, 15:13 автор: LiveExpert |
|
Azinomoney.com - гемблинг-партнерка с 65%RS для каждого Гарантированный заработок на гемблинг-трафике |
65 | AzinoMoney | 29165 | Вчера, 19:10 автор: AzinoMoney |
|
Делаю полностью уникальный дизайн для сайтов! | 46 | AlexDIZ | 93452 | 26.3.2024, 20:03 автор: AlexDIZ |
|
Большие ставки для кликов в Я.Директ. Как удешевить? | 2 | rownong27 | 1117 | 26.3.2024, 14:13 автор: knezevolk |
Текстовая версия | Сейчас: 28.3.2024, 17:57 |