Выгрузка и сортировка меню сата из БД

КМ
На сайте с 08.03.2007
Offline
66
542

Помогите грамотно выгрузить меню сайта.

Структура БД.

-------------------

| id | podid | poz |

| 1 | 0 | 1

| 2 | 1 | 1

| 3 | 2 | 1

| 4 | 1 | 2

id - id пункта меню

podid - id пунк. которому подчинен данный элемент.

poz - позиция

Соответственно в БД все идет не по порядку.

На выходе должны получить такое меню:

Главная

- аа

Новости

- московские новости

- - экономика

- - культура

- пермские новости

- - культура

- - для детей

- - - от 6 лет

- - - от 10 лет

Тоесть должен быть любой уровень вложенности.

Как грамотно построить такое меню ?

P.S. Заранее спасибо, а то голова уже не работает.

Если сортировать примерно таким запросом.

SELECT * FROM cat ORDER BY podid, poz DESC
Skom
На сайте с 02.12.2006
Offline
165
#1

В своё время пришлось такую штуку делать

Оно, конечно изяществом не отличается, но работает исправно.

Понятно, что имя базы и поля свои ставить надо.

$SelectedId - если нужно, чтобы какой-то пункт был выбранным заранее.


global $CatSelect;
global $SelectedId;
global $p;

$CatSelect="<select name=\"$NameSelect\">\n<option value=\"0\">Нет</option>\n";
$CQ=mysql_query("select Id,Name from Categories where Parent=0 order by Name");
while($CR=mysql_fetch_object($CQ))
{
$CR->Id==$SelectedId ? $c_sel="selected" : $c_sel="";
$CatSelect.="<option value=$CR->Id $c_sel>$CR->Name</option>\n";
Childs($CR->Id);
};
$CatSelect.="</select>\n";


function Childs($Id=0)
{
global $CatSelect;
global $SelectedId;
global $p;
$PQ=mysql_query("Select Id,Name,Parent from Categories where Parent=$Id order by Name");
while($PR=mysql_fetch_object($PQ))
{

$p[$PR->Id]=$p[$Id]."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

$tt=Check($PR->Id);
if($tt>0)
{
$PR->Id==$SelectedId ? $c_sel="selected" : $c_sel="";
$CatSelect.="<option value=\"$PR->Id\" $c_sel>".$p[$PR->Id]."$PR->Name</option>\n";
Childs($PR->Id);
}
else
{
$PR->Id==$SelectedId ? $c_sel="selected" : $c_sel="";
$CatSelect.="<option value=\"$PR->Id\" $c_sel>".$p[$PR->Id]."$PR->Name</option>\n";
};

};
};

function Check($Id)
{
$PQ=mysql_query("Select count(*) as cnt from Categories where Parent=$Id");
$PR=mysql_fetch_object($PQ);
return $PR->cnt;
};

Cras amet qui numquam amavit quique amavit cras amet
[Удален]
#2

КиллерМЕН, при такой структуре таблицы - рекурсией.

Groove
На сайте с 22.02.2007
Offline
41
#3

http://phpclub.ru/faq/Tree/

Способы хранения деревьев в базах данных

jQuickForm = генератор форм на PHP (jQuery + HTML_QuickForm2) (http://jquickform.ru/) | iBegun.ru - цены в Бегуне (http://ibegun.ru/)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий