X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
> Запрос для рекурсивной функции, Не работает
gaaarfild
gaaarfild
Topic Starter сообщение 23.7.2010, 14:24; Ответить: gaaarfild
Сообщение #1


[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 AND a.id=a.parent ORDER BY a.title");[/php]

Данный запрос я сделал для рекурсивной функции. Но, к сожалению, он не извлекает ни одной записи.

В чем моя ошибка?

Для удобства объясню, что поле a.parent содержит id родительского модуля a.id.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 24.7.2010, 12:57; Ответить: ZiTosS
Сообщение #2


gaaarfild, попробуй с тремя таблицами. Скорее всего, в моем понимании, ты пытаешься вытащить рекурсивно модули, родителями которых являются модули верхнего уровня.
Попробуй сделать запрос из трех таблиц, а лучше изобрази всё схематично, как ты хочешь получить (скриншот + photoshop)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 25.7.2010, 13:27; Ответить: gaaarfild
Сообщение #3


Визуально это должно выглядеть как иерархическое дерево. Использую рекурсивную функцию php.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
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
gaaarfild
Topic Starter сообщение 25.7.2010, 14:10; Ответить: gaaarfild
Сообщение #5


В html. =)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 25.7.2010, 14:22; Ответить: ZiTosS
Сообщение #6


gaaarfild, пока ничего не понял, но ошибку я тебе показал. Я строил рекурсивные деревья меню. Данные помещал в безразмерный массив.
Так же была рекурсивная функция, в которую я передавал массив, куда нужно занести дочерние элементы, и передавал id родительского, обрабатывался SQL и вытаскивались дочерние, они так же вызывали эту функцию, передавая в качестве параметров свои подмассивы и так далее.
Скажи что нужно реализовать, сформулируй ТЗ!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
Topic Starter сообщение 25.7.2010, 16:26; Ответить: gaaarfild
Сообщение #7


Это система прав. Права в отдельной таблице прописаны для каждого модуля и пользователя. Но некоторые модули - они подмодули родительских модулей.

И мне необходимо организовать древовидную структуру, чтобы назначать права для модулей и подмодулей.

Когда не было иерархии, а были просто модули, все было без проблем. Но когда появился вопрос вложенности модулей, я впал в ступор.

Пью уже третью неделю. Продал квартиру и машину. Живу в картонной коробке с ноутбуком. Скоро зарядка закончится. =))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
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
gaaarfild
Topic Starter сообщение 26.7.2010, 1:05; Ответить: gaaarfild
Сообщение #9


Вложенность нужна неограниченная. И права у каждого модуля свои собственные.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 26.7.2010, 10:48; Ответить: ZiTosS
Сообщение #10


gaaarfild, Так если права у каждого модуля и подмодуля свои собственные, не понимаю зачем нужен такой запрос. Ведь если у тебя на каждый модуль хранятся права, то выбор по юзеру даст все модули.
А с большим количеством вложенности тебе нужно сделать примерно так: создание древовидного меню
Создавай безмерный массив, или же одноуровневый, смотря как и что тебе надо. А затем егол используй. Создать подобный массив можно рекурсивно, запрашивая в рекурсии дочерние элементы по полученным id основных модулей.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
3 страниц V   1 2 3 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Партнерская программа для Эзотерики, Магии, Таро
партнерка для эзотерики
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


 



RSS Текстовая версия Сейчас: 28.3.2024, 17:57
Дизайн