Yurik
/dev/null
Оптимизация поиска дочерних элементов
Задача:
есть в таблице дерево "id, pid" (parent id)
есть массив элементов ids
нужно выбрать массив всех дочерних элементов каждого из этих заданных ids
Решение:
Ежу понятно что оно нерациональное т.к. делается M*N запросов, где N - средний уровень вложения, M - изначальное к-во родителей в массиве $ids
Здается мне что можно все это сделать через 1 запрос, в котором будет LEFT JOIN таблицы "на себя" и вместо WHERE pid=N писать WHERE pid IN (a, b, c...) но не могу придумать запроса.
(a, b, c..) - элементы массива ids
Задача:
есть в таблице дерево "id, pid" (parent id)
есть массив элементов ids
нужно выбрать массив всех дочерних элементов каждого из этих заданных ids
Решение:
PHP:
function findchildren($_ids){
foreach ($_ids as $_id) {
do {
$_sql="SELECT id FROM table WHERE pid=".$_id;
$_result=$this->query($_sql, __LINE__, __FILE__);
while ($_row=mysql_fetch_row($_result)) $_tmp[]=$_id=$_row[0];
} while (mysql_num_rows($_result)!=0);
}
return $_tmp;
}
Здается мне что можно все это сделать через 1 запрос, в котором будет LEFT JOIN таблицы "на себя" и вместо WHERE pid=N писать WHERE pid IN (a, b, c...) но не могу придумать запроса.
(a, b, c..) - элементы массива ids