в них такие поля id pid sort title meta_k meta_d text
получается так что мне нужно зделать меню с 4 уровнями вложенности и чтоб оно динамически изменялось в зависимости от добавленного контента
я написал такой код для меню но знаю что он кривой и нагружает сервер может посоветуете как его переделать. прошу к моей просьюбе отнестись скептически так как я новичек и мало чего знаю и умею поетому фразой "здесь нужна рекурсия" врядли вы мне поможете ! заранее спасибо
<?php
$result2 = mysql_query("SELECT `id`, `img_url` FROM `main_data` ORDER BY sort ASC",$db);
while ($row = mysql_fetch_assoc($result2))
{
print '<tr height="43"><td></td><td background="../img/shadow.png" valign="top"><a href="/kozac/admin/index.php?id='. (int)$row["id"] .'"><img src="' .$row["img_url"].'"></a> </td><td></td></tr>';
$result3 = mysql_query("SELECT `id`, `title`,`pid` FROM `second_data` ORDER BY sort ASC",$db);
while ($myrow=mysql_fetch_assoc($result3))
{
if ($myrow['pid']==$row['id'])
{
print '<tr height="22">
<td valign="top" colspan="2">
<a class="local_nav_1_active_page" href="/kozac/admin/second_menu/index.php?id='. (int)$myrow["id"] .'">
'.htmlspecialchars($myrow["title"]).'
</a></td></tr>';
$result4 = mysql_query("SELECT `id`, `title`,`pid` FROM `third_data` ORDER BY sort ASC",$db);
while ($myrow2=mysql_fetch_assoc($result4))
{
if ($myrow2['pid']==$myrow['id'])
{
print '<tr height="20"><td></td>
<td valign="top"><a class="local_nav_2_active_page" href="/kozac/admin/third_menu/index.php?id='. (int)$myrow2["id"] .'">
'.htmlspecialchars($myrow2["title"]).'
</a></td></tr>';
$result5 = mysql_query("SELECT `id`, `title`,`pid` FROM `four_data` ORDER BY sort ASC",$db);
while ($myrow3=mysql_fetch_assoc($result5))
{
if ($myrow3['pid']==$myrow2['id'])
{
print '<tr height="28"><td></td>
<td valign="top"><a class="local_nav_3" href="/kozac/admin/four_menu/index.php?id='. (int)$myrow3["id"] .'">
'.htmlspecialchars($myrow3["title"]).'
</a></td></tr>';
$result6 = mysql_query("SELECT `id`, `title`,`pid` FROM `five_data` ORDER BY sort ASC",$db);
while ($myrow4=mysql_fetch_assoc($result6))
{
if ($myrow4['pid']==$myrow3['id'])
print '<tr height="18"><td></td>
<td valign="top"><a class="local_nav_4" href="/kozac/admin/five_menu/index.php?id='. (int)$myrow4["id"] .'">
'.htmlspecialchars($myrow4["title"]).'
</a></td></tr>';
}
}
}
}
}
}
}
}
?>
Спустя 3 часа, 23 минуты, 3 секунды (22.09.2010 - 13:57) Dingo написал(а):
Сначала таблицу спроектируй нормально, ну самое легкое
А там уже и составляй алгоритм....
id | Надпись | Линк | родитель
=====================
| | |
А там уже и составляй алгоритм....
Спустя 47 минут, 6 секунд (22.09.2010 - 14:44) Thief8925 написал(а):
так в том то и дело что я непонимаю как устроенна такая таблица
Спустя 1 час, 9 минут, 33 секунды (22.09.2010 - 15:54) Dingo написал(а):
ну смотри
Цитата |
id Имя Линк родитель 1 Главная Страница main 0 2 Пользователи user 0 3 Авторизация autostration 2 4 Регистрация registration 2 |
Будет меню типа:
Цитата |
* Главная страница * Пользователи + Авторизация + Регистрация |
Так понятно,
если у пункта родитель 0, то это самый первый пункт, суперпункт, он родитель
и не может быть дочернем пунктом, ибо id с 0 значение нету. К таким пунктом подключаются дочерние пункты, также дочерние пункты могут подключаться друг к другу в итоге существует возможность возможность строить бесконечно вложенные иерархии

Спустя 14 минут (22.09.2010 - 16:08) Thief8925 написал(а):
а как под ето написать алгоритм чтоб потом каждый пункт отдельно имел свою ссылку и вел на редактирование и т.п ?????
Спустя 12 минут, 31 секунда (22.09.2010 - 16:20) Dingo написал(а):
Thief8925 он уже написан, такой вопрос уже разбирался здесь, сейчас дам примерный код.
пример использования
У меня есть примерный скрипт редактирования такой иерархии, но я тебе его не дам
function make_hierarchy($array = null)
{
if ($array)
{
foreach ($array as $value)
$arr[$value[3]][$value[0]] = array($value[1],$value[2]);
return get_hierarchy($arr,count($arr));
}
}
function get_hierarchy($array,$count,$x=0)
{
if ($array[$x])
{
$html = '<ul>';
foreach ($array[$x] as $key => $value)
{
$html .= '<li>';
$html .= '<a href="'.$array[$x][$key][1].'">'.$array[$x][$key][0].'</a>';
$html .= get_hierarchy($array,$count,$key);
$html .= '</li>';
}
$html .= '</ul>';
}
return $html;
}
пример использования
$a[] = array (1, Главная страница, main , 0);
$a[] = array (2, Пользователи, user , 0);
$a[] = array (3, Авторизация, autorisation , 2);
$a[] = array (4, Регистрация , registration , 2);
echo make_hierarchy($a);
У меня есть примерный скрипт редактирования такой иерархии, но я тебе его не дам

Спустя 1 час, 25 минут, 17 секунд (22.09.2010 - 17:46) Thief8925 написал(а):
эмм сложно ето еще для меня блин мне на моем примере б кто обьяснил, и непонятно если я удалю родителя с таким ИД то куда денутся подпункты и как админить ихнее перемещение под родителями и т.д
Спустя 44 минуты, 58 секунд (22.09.2010 - 18:31) Dingo написал(а):
Цитата (Thief8925 @ 22.09.2010 - 14:46) |
эмм сложно ето еще для меня блин мне на моем примере б кто обьяснил, и непонятно если я удалю родителя с таким ИД то куда денутся подпункты и как админить ихнее перемещение под родителями и т.д |
а кто тебе мешает разобраться в данном коде, ты же как никак хочешь быть хоть малость похожим на программиста

Спустя 26 минут, 6 секунд (22.09.2010 - 18:57) Thief8925 написал(а):
хм... я знаю что я нечего не знаю но ненадо ето подчеркивать я ведь научится пытаюсь ...