Surround
31-05-2010, 18:50
День добрый! есть такая связка таблиц (в аттаче). У устройства есть порты, которые соединяются между собой, тем самым подключая устройства друг к другу. Реляционная модель. Заполняется данными. Так вот нужно получить список всех устройства, например, идущих вниз по иерархии...
Написал простенькую рекурсию.
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 - код устройства-владельца порта
Она проходит только под одной ветке до тупика. А вот вверх как пониматься для продолжения по другой ветке, я не придумаю...
Подсобите идеей, пожалуйста :shot:
Написал простенькую рекурсию.
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 - код устройства-владельца порта
Она проходит только под одной ветке до тупика. А вот вверх как пониматься для продолжения по другой ветке, я не придумаю...
Подсобите идеей, пожалуйста :shot: