Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
1-61107
Nikolai_S
2002-09-09 11:25
2002.09.19
Передача данных в Word через TWordApplication происходит медленно


3-60965
bubuka
2002-08-28 18:53
2002.09.19
Умножение в запросе


14-61296
Driverrr
2002-08-21 21:18
2002.09.19
Компоненты


1-61116
maxim2
2002-09-10 09:23
2002.09.19
Как получить список всех шрифтов в системе


4-61384
Vadislav Bikov
2002-07-28 12:56
2002.09.19
Перехват сообщений в OutLook





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский