Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
взаимоподчинённые записи одной таблицы (Этеронеф) 16/11/2004 - 02:54:58
      Re: взаимоподчинённые записи одной таблицы (Этеронеф) 16/11/2004 - 03:14:32
      Re: взаимоподчинённые записи одной таблицы (Dubrovsky) 16/11/2004 - 08:27:12
      Re: взаимоподчинённые записи одной таблицы (Валентин) 16/11/2004 - 15:58:37
      Re: взаимоподчинённые записи одной таблицы (DNick) 17/11/2004 - 08:52:57
      Re: взаимоподчинённые записи одной таблицы (Валентин) 17/11/2004 - 11:08:42
      Re: взаимоподчинённые записи одной таблицы (Alex Hemp) 17/11/2004 - 19:09:04
      Re: 2 Alex Hemp (Валентин) 19/11/2004 - 10:38:34

> Original message text:
> From: Этеронеф - 16/11/2004 - 02:54:58
> Subject:взаимоподчинённые записи одной таблицы
> -----------------
> помнится, ОРАКУЛ справлялся с этой проблемой успешно...
> условие: таблица содержит данные сотрудников, одно из полей, "Началнык", указывает либо на NULL, либо на иную запись этой же таблицы. тот, с NULLём - типа пахан.
> задача: одним запросом построить коллег в виде дуба корнями книзу, сиречь: пахан, подпаханник1, бригадир, ...тырыпыры... шестёрка, подпаханник2 ...тырыпыры...
>


From: Валентин - 16/11/2004 - 15:58:37
Subject:взаимоподчинённые записи одной таблицы
-----------------
Я так понимаю, что вопрос по древовидным справочникам.
1) Если начальник будет указывать на подчиненного, то как же он будет указывать на 2-го подчиненного в одном поле? Это насчет корректности вопроса.
2) ORACLE тут вообще не причем, деревья не в ORACLE придумали :) а вот пару функций по деревьям написали - это хорошо.

Деревья можно хранить в табличке под ЛЮБЫМ сервером БД и в dbf-ках :)

Принцип простой: запись знает своего начальника, в свою очередь начальник знает своего, и так до NULL.
Реализация для InnoDB такая:
CREATE TABLE `table2` (
`ID` int(11) unsigned NOT NULL auto_increment,
`MasterID` int(11) unsigned default NULL,
`Name` varchar(30) default NULL,
PRIMARY KEY (`ID`),
KEY `idx_MasterID` (`MasterID`),
CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`MasterID`) REFERENCES `table2` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=cp1251

ID - ключ
MASTERID - указывает на родителя(начальника, пахана).

Для MyIsam внешний ключ работать не будет, но синтаксис пропустит, и на деле будет выглядеть так:
CREATE TABLE `table3` (
`ID` int(11) unsigned NOT NULL auto_increment,
`MasterID` int(11) unsigned default NULL,
`Name` varchar(30) default NULL,
PRIMARY KEY (`ID`),
KEY `idx_MasterID` (`MasterID`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251

Специальных функций по деревьям в mysql к сожалению нет.
ps. запросы приведены для mysql 4.1.х


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
18533



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |