Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » рекурсивный спуск в таблицу

Ответить
Настройки темы
рекурсивный спуск в таблицу

Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


День добрый! есть такая связка таблиц (в аттаче). У устройства есть порты, которые соединяются между собой, тем самым подключая устройства друг к другу. Реляционная модель. Заполняется данными. Так вот нужно получить список всех устройства, например, идущих вниз по иерархии...
Написал простенькую рекурсию.
PHP код: Выделить весь код

function r($device1$device2)

{

$sql="SELECT dev_code FROM devices WHERE dev_code IN (
    SELECT owner_dev_code FROM ports WHERE con_port_id IN (
        SELECT id FROM ports WHERE owner_dev_code = '$device1'
    )
) AND dev_role = 'AC' AND dev_code != '$device2'"
;
$device2=$device1;
$result mysql_query($sql);
$new_device=mysql_fetch_array($result);
print 
$new_device[0]."<br>";
if (
$new_device[0]!='')
{
    
r($new_device[0],$device2);


dev_code - код устройства
owner_dev_code - код устройства-владельца порта
Она проходит только под одной ветке до тупика. А вот вверх как пониматься для продолжения по другой ветке, я не придумаю...
Подсобите идеей, пожалуйста

Отправлено: 18:50, 31-05-2010

 

Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: gif 11.GIF
(4.4 Kb, 6 просмотров)

схема таблиц

Отправлено: 18:56, 31-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


непонятны типы полей (может какие уникальные), и по каким возможна связка.
имхо проще с do{....}while() разрулить.

имхо в цикле мб запросы со связкой 2 таблиц по коду устройства, с динамическим формированием WHERE. Устройства можно собирать в массив, где оставлять только уникальные значения.

Запросы с подзапросами нагружают базу...

Отправлено: 02:34, 01-06-2010 | #3


Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


Поле "Код" таблицы Devices уникально, хотя, конечно, не очень красиво сделано - внешний ключ не отражается в первичный, но все же. "Модель" - текст, ну а все остальное - Int.
Ну да, связку в цикле я тоже пробовал, но вот обратно выйти на уровень выше, если по одной из веток найден конец, не выходит

Отправлено: 07:40, 01-06-2010 | #4


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Цитата Surround:
$result = mysql_query($sql);
$new_device=mysql_fetch_array($result);
print $new_device[0]."<br>"; »
рекурсию по идее надо для каждой строки ответа в цикле применять, чтобы дерево получить, а у вас результат запроса понимается как одна строка... Одна строка по идее дб только при первом вызове (верхний узел).

Отправлено: 10:02, 01-06-2010 | #5


Аватара для Surround

Ветеран


Сообщения: 908
Благодарности: 20

Профиль | Отправить PM | Цитировать


Цитата:
рекурсию по идее надо для каждой строки ответа в цикле применять
это-то верно... только код все равно зацикливается... может, где не так написал..

Отправлено: 12:27, 01-06-2010 | #6



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » рекурсивный спуск в таблицу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
ищу таблицу соответствия драйверов видеокартам. dzekka Видеокарты 7 15-03-2010 12:33
[решено] Рекурсивный поиск файла cra5h_ AutoIt 47 06-02-2010 11:38
вопрос про таблицу Zero93 Вебмастеру 8 23-12-2005 13:45
про таблицу slaine Вебмастеру 8 11-07-2005 20:13
phpmyadmin как создать таблицу в базе?? FADE Вебмастеру 10 30-06-2004 13:02




 
Переход