Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

Господа, помогите с алгоритмом.   Найти похожие ветки 

 
ded_di ©   (2002-08-22 17:50) [0]

Нужен алгоритм вывода меню.
Подробне...

Имеется таблица

menu
__________
id – натуральные, уникальные.
parent_id
caption
reference
order_no

Нужна функция выводящая меню из данной таблицы (собственно вывод, как вы понимаете, не важен)

Например имеется меню

a
aa
ab
aba
abb
abc
ac
aca
acb
b
ba
bb
bba
bbb
bc
bca

В случае активного пункта, например abc меню должно выглядеть, как вы понимаете, так

a
aa
ab
aba
abb
abc
ac
b

Собственно вопрос в том, как определить какие пункты выводить, а какие нет.

ЗЫ: Могу пояснить, если что не ясно.

Заранее спасибо.


 
Keyboard Shooter   (2002-08-22 17:59) [1]

Distinct ParentId по каждому Id.


 
ded_di ©   (2002-08-22 18:10) [2]

Указанное выше меню в базе представляется следующим образом

id | parent_id | caption | остальное не имеет значения
1 | 0 | a |
2 | 0 | b |
3 | 1 | aa |
4 | 1 | ab |
5 | 1 | ac |
6 | 2 | ba |
7 | 2 | bb |
8 | 2 | bc |
9 | 4 | aba |
10 | 4 | abb |
11 | 4 | abc |
12 | 5 | aca |
13 | 5 | acb |
14 | 7 | bba |
15 | 7 | bbb |
16 | 8 | bca |


активный пункт задается переменной position равной id активного пункта

2 Keyboard Shooter:
Сам попробуй, то что ты написал. Это не решение.


 
ded_di ©   (2002-08-23 16:09) [3]

Всем спасибо за помощь :(
Решение на ПХП выглядит так:

function menu_by_path ($path, $pos) {
global $db, $position;
$result = mysql_query("select * from menu where parent_id=" . $path[$pos] . " order by order_no", $db);
if (mysql_num_rows($result) != 0) {
while ($row = mysql_fetch_array($result)) {
if ($position == $row["id"]) {
show_item($row, true); \\ не имеет значения true - активный пункт меню
$result_ch = mysql_query("select * from menu where parent_id=" . $row["id"] . " order by order_no", $db);
if (mysql_num_rows($result_ch) != 0) {
while ($row_ch = mysql_fetch_array($result_ch)) {
show_item($row_ch, false);
}
}
} else {
if ($path[$pos-1] == $row["id"]) {
show_item($row, false);
menu_by_path($path, $pos-1);
} else {
show_item($row, false);
}
}
}
}
}

function show_menu() {
global $db, $position;
$res = $position;
$path[] = $res;
while ($res != 0) {
$result = mysql_query("select parent_id from menu where id=" . $res, $db);
$res = mysql_result($result, 0, "parent_id");
$path[] = $res;
}
menu_by_path($path, count($path)-1);
}

критикуйте если что.



Страницы: 1 вся ветка

Текущий архив: 2002.09.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
3-60974
Nina
2002-08-27 15:14
2002.09.19
подскажите в чём тут ошибка?


1-61072
Шурик Ш
2002-09-09 15:34
2002.09.19
Редактирование TreeView


3-60996
Nash
2002-08-29 15:34
2002.09.19
Подскажите пожалуйста синтаксис between, а то запутался с кавычка


14-61268
RV
2002-08-23 12:20
2002.09.19
вот, например, что можно сделать, если


1-61067
AlexSM
2002-09-06 13:43
2002.09.19
Как вставить рисунок (bitmap) из Clipboard в Word?