[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SELECT
dvs
есть таблица pages:
id pid text
[1] [0] ["текст"]
[2] [0]
[3] [0]
[4] [2]
[5] [2]
[6] [4]
[7] [0]
[8] [7]
[9] [8]

таблица страниц, первое поле id втрое pid(id родителя ), вложенность не ограничена, как узнать все id детей, внуков, правнуков и тд данного id(для дальнейшего удаления из бд)свой запрос не получилось составить, запутался, если не трудно помогите пожалуйста



Спустя 5 минут, 7 секунд (25.10.2011 - 20:39) Игорь_Vasinsky написал(а):
Ну я бы сделал структуру такую, чтоб потом голову не ломать

parents
id | name | ...


childs
id | name | id_parents | ...

secondcilds
id | name | id_childs | ..



Видно как таблицы связаны?

Спустя 4 минуты, 36 секунд (25.10.2011 - 20:44) dvs написал(а):
видно, структура уже есть, переделывать не охота

Спустя 2 минуты, 53 секунды (25.10.2011 - 20:47) Игорь_Vasinsky написал(а):
SELECT `id` FROM `table` WHERE `pid` = $ил_родителя

Спустя 6 минут, 3 секунды (25.10.2011 - 20:53) dvs написал(а):
проблема не в этом:) так мы выберем только детей, а нужно до кончиков корней то есть и внуков и правнуков, надо это в какой то цикл обернуть типа foreach() только как?

Спустя 1 минута, 9 секунд (25.10.2011 - 20:54) dvs написал(а):
а вложенность неограниченная , сколько селектов таких писать неизвестно

Спустя 16 минут, 59 секунд (25.10.2011 - 21:11) Лена написал(а):
На уровне SQL такое решается или с помощью плейсхолдера или с помощью nested sets - вложенных множеств. Но так как вы не хотите структуру базы менять, вам лучше всего разложить дерево на уровне php. Ищите про рекурсию(рекурсивную функцию) - она может учитывать вложенность неограниченного количества уровней.
Я вам кусок своего скрипта сюда выложу, сделайте по аналогии:

function Tree($parent,$level){
//коннект с базой, список
global $link;
$q = "SELECT * FROM `admin` WHERE `pid` = " . $parent . " ORDER BY page_id";
$result = mysql_query($q);
if(!$result) exit(mysql_error());
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$nbsp = " ";
$otstup = str_repeat($nbsp, $level*3);
if($parent == 0)
$list .= '<h1>' . $otstup . "<a href = '" . $row['id'] . "'>" . htmlspecialchars($row['admin_title']) . "</a></h1>";
else
$list .= $otstup . "<a href = '" . $row['id'] . "'>" . htmlspecialchars($row['admin_title']) . "</a><br />";
$list .= Tree($row['id'],$level+1);
}
}

return $list;
}

//вызов функции
Tree($parent,0);

Спустя 7 минут, 9 секунд (25.10.2011 - 21:18) dvs написал(а):
спасибо, будем пробовать)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.