[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод дерева услуг с подгруппами
Tracktor
Здравствуйте.

Имеется БД PostgreSQL.
Результатом довольно хитрого запроса из неё делается выборка, в результате получается примерно такая таблица:

user posted image

Сам запрос:
$res = pg_query ("SELECT DISTINCT struc_usl.id_usl, u.naz AS naz_u, u.nom AS nom_u, u.gr_id as id_gr_u, g.idp AS korn_g_id, g.naz AS naz_g, g.npp, p.naz AS korn_g_naz, b.naz AS naz_b FROM isp.struc_usl
LEFT JOIN (SELECT * FROM uslugi.usl_sp) AS u ON struc_usl.id_usl = u.id
LEFT JOIN (SELECT * FROM uslugi.grusl) AS g ON u.gr_id = g.id
LEFT JOIN (SELECT * FROM uslugi.grusl) AS p ON p.id = g.idp
LEFT JOIN (SELECT * FROM uslugi.doc_blanks WHERE doc_blanks.naz = 'Регламент' AND doc_blanks.docblank is not null) AS b ON u.id = b.id_usl
WHERE u.gr_id !=121 AND u.gr_id !=158 AND u.gr_id !=169
ORDER BY npp, nom_u"
);
$arr = pg_fetch_all ($res);


id_usl - id услуги;
naz_u - название услуги;
nom_u - краткий код услуги;
id_gr_u - id группы услуг;
korn_g_id - id корневой группы услуг (если null значит корневой для этой услуги является группа id_gr_u);
naz_g - имя группы услуг;
korn_g_naz - имя корневой группы услуг;
naz_b, npp - в данной задаче не потребуются.

Необходимо построить дерево, чтобы, исходя из таблицы в примере, получилось примерно следующее:

Группа услуг 1
УСЛ-01 Услуга 01
УСЛ-02 Услуга 02
УСЛ-03 Услуга 03
УСЛ-04 Услуга 04
Группа услуг 2
Группа услуг 3
УСЛ-05 Услуга 05
УСЛ-06 Услуга 06
УСЛ-07 Услуга 07
Группа услуг 4
УСЛ-08 Услуга 08
УСЛ-09 Услуга 09
УСЛ-10 Услуга 10


В разборе массивов не силён, да и вообще сам не программист. А сделать надо... Прошу помощи в написании нужного кода.
TMake
С кодом не помогу, а вот по структуре дерева лучше посмотреть без рекурсивное дерево nested set
Kusss
Это если больше не будет вложенности.
if (is_aray($arr)) {
$array = [];
foreach ($arr AS $value){

$val = $value['nom_u'].' '.$value['naz_u'];
if (!empty($value['korn_g_naz'])) {
$array[ $value['korn_g_naz'] ][ $value['naz_g'] ] = $val;
} else {

$array[ $value['naz_g'] ] = $val;
}
}

echo '<pre>';
print_r($array);
echo '</pre>';
} else
echo 'Нет данных';
Tracktor
Kusss
Ругается:
Parse error: syntax error, unexpected '[' in W:\home\test3.ru\www\test2.php on line 23

На 23-й:
$array = [];
Kusss
Начиная с PHP 5.4 возможно использовать короткий синтаксис определения массивов, который заменяет языковую конструкцию array() на [].
$array = array();
Tracktor
Странно, но так тоже ругается:
Parse error: syntax error, unexpected ')' in W:\home\test3.ru\www\test2.php on line 23
T1grOK
if (is_array($arr)) {

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Kusss
T1grOK
Спасибо
Tracktor
Цитата (T1grOK @ 8.06.2016 - 14:50)
if (is_array($arr)) {

Это да... но ошибка осталась ohmy.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.