Здравствуйте. Есть потребность сделать следующие. Представьте, что есть таблицы usergroups и rules.
В первой - группы пользователей, во второй - права, которыми могут обладать группы. В каждой группе есть поле, к примеру, rules, где перечислены id прав из таблицы rules. Нужно получить из таблицы usergroups группы и права, им присущие, за один sql-запрос и получить ассоциативный массив вида:
Array([0]{
id => '1',
gr_name => 'group1',
rules => Array([0]{
id => '1'
name => 'какой-то name'
},
[1]{
id => '2'
name => 'какой-то другой name'
})
})
т.е. почему я назвал тему "Многоуровневый запрос", так как нужно, что php-функция pg_fetch_assoc вернула многоуровневый ассоциативный массив.
Пробовал в MySQL - не вышло, гуру сказали, что в MySQL - это анреал=)
Сказали, что это может oracle, но сами понимаете)))
Есть у кого изящные предложения? (здесь боремся именно за изящность кода!)
Что-то путанно
Что-то путанно как-то вы объяснили.
Давайте уж с примерами. Набросайте CREATE TABLE с полной структурой таблиц и хотя бы по паре записей в каждой таблице. Затем покажите что бы вы хотели видеть не в PHP-массиве (этим пусть PHP-шники занимаются), а в результате выполнения запроса (т.е. в виде таблицы что бы вы хотели получить на выходе).
ничего путанного...
Я все понял. Вопрос не к Вам, потому что Вы - не PHP программист. Здесь обязательно нужно знание PHP, так как интерпретатор берет на себя организацию конечного массива. Спасибо.
Хочу только
Хочу только заметить, что если проблема в организации данных запроса в PHP-массив и тут неприменно нужно знание PHP, то и обратится лучше на соответствующий форум, где общаются программисты на PHP, а не сюда
Никогда не
Никогда не видел, чтобы функция pg_fetch_assoc возвращала многоуровневые ассоциативные массивы.
Как вариант, могу предложить:
users
_______________
id | name | rule_id
1 | "test1" | 1
2 | "test1" | 2
3 | "test1" | 3
4 | "test2" | 3
5 | "test3" | 2
6 | "test3" |1
================
rules
________________
id | rule
1 | "rule number one"
2 | "rules number two"
3 |"one more rule"
================
select distinct name, array(select rule from users u, rules r where u.name=m.name and u.rule_id=r.id) as rule_set from users m
Array
(
[name] => test1
[rule_set] => {"rule number one","rules number two","one more rule"}
)
Array
(
[name] => test2
[rule_set] => {"one more rule"}
)
Array
(
[name] => test3
[rule_set] => {"rule number one","rules number two"}
)
P.S. Я не вникал в имена ваших таблиц/полей, но думаю, что идея понятна.