Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Графы? "Деревья" вопросов в БД / 9 сообщений из 9, страница 1 из 1
15.04.2006, 23:52
    #33669166
Мальчишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
Необходимо в базу данных вбить "деревья" вопросов, причем в каждом "дереве" разное количество уровней (количество "развилок" максимум 3, в большинстве случаев 2). Например:
Уровень №1: "1, 2 или 3?"
Уровень №2: "Если 1, то 1, 2 или 3?" "Если 2, то 1, 2 или 3?" "Если 3, то 1, 2 или 3?"
Уровень №3: "Если 1-1, то 1, 2 или 3?" "Если 1-2, то 1, 2 или 3?"... "Если 3-3, то 1, 2 или 3?"
и т.д.
Максимальное количество уровней в пределах 5-10...
Как это можно реализовать? Таблица с 10-ю строками, в каждой из которых будет список из вопросов (в формате 1-1-3-2 (в первом уровне 1 вопрос, потом опять 1, потом 3, потом 2))? Или 10 таблиц? Но ведь такие "деревья" надо делать для каждой ячейки в самой первой БД (которая и пораждает вопросы)... :(
Буду благодарен за любую помощь.
...
Рейтинг: 0 / 0
16.04.2006, 00:27
    #33669180
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
читай про нестед сетс
...
Рейтинг: 0 / 0
16.04.2006, 09:23
    #33669267
Мальчишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
JackSчитай про нестед сетс
а ссылочку не кинете?
...
Рейтинг: 0 / 0
16.04.2006, 14:09
    #33669422
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
...
Рейтинг: 0 / 0
16.04.2006, 22:04
    #33669808
Мальчишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
Спасибо за ссылку! Алгоритм "Nested Sets" для моей задачи наверное будет лишним (т.к. вывод вопросов будет только 1 раз и строго по иерархии (вопрос 1 уровня - 2 уровня -3...) - никакого поиска/удаления/вставки веток не будет), а вот алгоритм из вступительной статьи по деревьям подходит в самый раз!
Правда я никогда не работал с MySQL и поэтому не понял следующей функции вставки:
Код: plaintext
1.
2.
3.
4.
function sql_insert($parent_id, $cat_name) {
    $query = "INSERT INTO catalogs(parent_id, cat_name) VALUES('".(int)$parent_id."', '$cat_name')";
    mysql_query($query) or die(mysql_error());
    return mysql_insert_id(); // возвращаем id внесенной записи 
Код: plaintext
1.
2.
$level[ 1 ][ 0 ] = sql_insert("0", "Программирование");
$level[ 2 ][ 0 ] = sql_insert($level[ 1 ][ 0 ], "Веб программирование");
...
Что означает ".(int)$parent_id."? Каким образом $level[1][0] стал int'ом? Как это будет выглядеть в firebird (InterBase)?
...
Рейтинг: 0 / 0
17.04.2006, 00:58
    #33669939
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
вообще то это не SQL а PHP + SQL запрос

СКЛ запрос прост до безобразия и думаю мало чем отличается для любой из баз

(int)$parent_id означает что $parent_id приведён к инту

$level[1][0] стал интом таким же образом как и $level[2][0] гляди на то что функция возвращает ... там даже коммент написан ...
...
Рейтинг: 0 / 0
17.04.2006, 01:01
    #33669941
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
а нестед сетс самое оно для тебя ... простые выборки достаточно простая структура ... что ещё надо то ? :)
...
Рейтинг: 0 / 0
17.04.2006, 09:32
    #33670161
Мальчишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
JackS(int)$parent_id означает что $parent_id приведён к инту
:) как это работает я понял, не понял, что за структура такая $level[х][х] и почему она выглядит как переменная? Ну допустим это два обычных числа и они с помощью (int)$parent_id приводятся к одному числу... Но тогда как это сделать в firebird (InterBase)? С помощью какой "функции"?
Чувствую, что просто, но допетрить не могу :/
JackSа нестед сетс самое оно для тебя ... простые выборки достаточно простая структура ... что ещё надо то ? :)
Ну в принципе может и Нестед Сетс, но я пока не вижу преимуществ, которые я бы смог использовать...
...
Рейтинг: 0 / 0
17.04.2006, 10:14
    #33670279
JackS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Графы? "Деревья" вопросов в БД
Мальчишка JackS(int)$parent_id означает что $parent_id приведён к инту
:) как это работает я понял, не понял, что за структура такая $level[х][х] и почему она выглядит как переменная? Ну допустим это два обычных числа и они с помощью (int)$parent_id приводятся к одному числу... Но тогда как это сделать в firebird (InterBase)? С помощью какой "функции"?
Чувствую, что просто, но допетрить не могу :/
JackSа нестед сетс самое оно для тебя ... простые выборки достаточно простая структура ... что ещё надо то ? :)
Ну в принципе может и Нестед Сетс, но я пока не вижу преимуществ, которые я бы смог использовать...

эта странная структура называется хэшем, тобишь ассоциативным массивом :)
знаете лучший способ организации дерево средствами языка программирования ? если нет то вот и ответ почему именно так :)

firebird (InterBase) в глаза никогда не видел :)

ну раз не видно приемуществ то более ни чем помочь не в состоянии ююю сщвет дан а как им пользоваться - дело третье
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Графы? "Деревья" вопросов в БД / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]