Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, у меня такой вопрос
Создано дерево (меню)
id | parent_id | name
-----------------------------
1 0 Меню 1
2 1 Меню 1.1
3 0 Меню 2
4 2 Меню 2.1
5 2 Меню 2.2
6 5 Меню 2.2.1
7 0 Меню 3
8 0 Меню 4
9 0 Меню 5
Вопрос в том, как правильно создать запрос, чтобы передвигать меню на +/- 1 уровень.
Спасибо огромное за помощь.
Неактивен
Думаю, это лучше делать в логике приложения. Простейшие случаи можно, конечно,
попробовать написать и запросами, но наверняка нужно будет что-то сложнее.
«-1»: найти родителя родителя
UPDATE menu m SET parent_id = (SELECT parent_id FROM menu WHERE id = m.parent_id) WHERE id = $id
С «+1» сложнее — придумайте алгоритм выбора родителя.
Неактивен
paulus написал:
Думаю, это лучше делать в логике приложения. Простейшие случаи можно, конечно,
попробовать написать и запросами, но наверняка нужно будет что-то сложнее.
«-1»: найти родителя родителя
UPDATE menu m SET parent_id = (SELECT parent_id FROM menu WHERE id = m.parent_id) WHERE id = $id
С «+1» сложнее — придумайте алгоритм выбора родителя.
Я так понимаю что,
id parent_id name
---------------------
1 0 Главная
2 1 О нас
3 1 Контакты
4 0 Форум
Я так пониаю что если я затрону ряд 1 0 Главная и поменяю id то всё меню наруштися так как функция которая отображает меню содержит уже указаные переменные которые определяют с каково уровня показывать..
http://mycms.boris-k.net/ - вот что я делаю
http://mycms.boris-k.net/admin/ - вот что я делаю
function getPages($parent_id=0,$level=0) { $result=mysql_query("SELECT * FROM tbl_pages WHERE parent_id=$parent_id ORDER BY id ASC"); $meny = array(); while($row=mysql_fetch_assoc($result) ) { $meny[] = array( 'name' => $row['name'], 'id' => $row['id'], 'link' => $row['link'], 'level' => str_repeat('- ',$level) ); $meny = array_merge($meny, getPages($row['id'], $level + 1)); } return $meny; }
Вот ещё 1 функция на перемещение childov не уверен ещё не пробывал неуспел
function changeOrder($currentOrderNum, $newOrderNum) { $TableName = ""; $orderField = ""; if($newOrderNum < $currentOrderNum) { $update1 = mysql_query("UPDATE $TableName SET $orderField = $orderField+1 WHERE $orderField >= '$newOrderNum' AND $orderField < '$currentOrderNum'") or die(mysql_error()); } else { $update1 = mysql_query("UPDATE $TableName SET $orderField = $orderField-1 WHERE $orderField <= '$newOrderNum' AND $orderField > '$currentOrderNum'") or die(mysql_error()); } }
Отредактированно Борис (27.04.2009 15:52:01)
Неактивен
Пожалуйста направте..
Неактивен
Ну, например, так:
«найти брата»:
SELECT id FROM tablename
WHERE parent_id = (SELECT parent_id FROM tablename WHERE id = $id) AND id != $id
«+1»
UPDATE tablename SET parent_id = («найти брата») WHERE id = $id
И все-таки, алгоритм надо придумать
Неактивен
Спасибо получилось!
http://mycms.boris-k.net/
http://mycms.boris-k.net/admin/
Неактивен