Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите отобразить результаты SQL запроса в виде 3-уровневого списка
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Есть такое понятие как рекурсия. Можите прочитать на википедии что этои как работает а вот здесь посмотреть пример как раз с выводом дерева из базы
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
nofx
Отправлено: 20 Апреля, 2011 - 16:39:45
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Знаю, но такие методы построения основываются на $id - идентификаторе раздела и $pid - идентификаторе родительского раздела, а таких полей в моей БД просто нету
Пробую это сделать по такой придуманной схеме:
1)делаю запрос по школам c группировкой (GROUP BY) и формирую массив $one[], который содержит отобранные школы (это будет 1-ый уровень)
2)делаю запрос по школьникам ,из него формирую двумерный массив $two[]
То есть массив в массиве:
$two = array("id_school" => array ( "name"=> имя школьника));
3) как-то отобразить массивы в циклах, типа такого:
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
Вроде получилось, список выводится как я хотел.Привожу код ( только он "быдлокодовский и непонятный" как-то модно говорить , так что извиняюсь - я новичок):
//выводим школьников этой школы, то есть $two[$i][id_school]==$one[$i][id_school]
for($j=0;$j<count($two);$j++)
{
if($two[$j]["id_school"]==$one[$i]["id_school"])
{
$n2++;
echo'__'.$n2.'-'.$two[$j]["fam"].'</br>';
}
}
}
OrmaJever
Отправлено: 20 Апреля, 2011 - 21:18:15
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
nofx пишет:
а таких полей в моей БД просто нету
Значит не верная структура бд и нужно ещё подумать как её оптимизировать.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
nofx
Отправлено: 20 Апреля, 2011 - 21:29:08
Новичок
Покинул форум
Сообщений всего: 22
Дата рег-ции: Янв. 2011
Помог: 0 раз(а)
хотите сказать, какую бы информацию и чего бы только базы данных не хранили ( заказы, покупки, деньги, транзакции, атомные виды оружия, запчасти) разумеется с первичными и вторичными ключами , но... без идентификаторов на родительские каталоги ( ну нету их - каталогов), имеют не верную структуру?
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Ладно рекурсия дело не лёгкое поэтому попытался накунуть функцию из примера под ваш запрос. Только я не могу проверить поэтому это только для наглядности.
Оставил коментарии.
echo$categ->{$c};// выводит колонку с именем которое передали во 2 параметре
echo"<br>\n";
if(isset($arr[$c])) tree($categ->{$c},$arr[$c]);// если мы не упёрлись в конец масива (тоесть не id_schkolnik) то
// вызываем рекурсию с текущим ид но сортировать уже будем по следуйщей колонке из масива
// если сортировали по школе то теперь будем по преподавателю, если по препод. то дальше по ученикам.
}
}
tree(1,'id_scool');
(Добавление)
nofx пишет:
хотите сказать, какую бы информацию и чего бы только базы данных не хранили ( заказы, покупки, деньги, транзакции, атомные виды оружия, запчасти) разумеется с первичными и вторичными ключами , но... без идентификаторов на родительские каталоги ( ну нету их - каталогов), имеют не верную структуру?
Нет извините я просто не читал первый пост просто подумал что если вы написали что у вас нету таких полей то значит не верная структура, но потом увидел первую таблицу и понял что верно
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.