SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.04.2009 03:26:16

Борис
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 29

Здравствуйте, у меня такой вопрос

Здравствуйте, у меня такой вопрос

Создано дерево (меню)

  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 уровень.

Спасибо огромное за помощь.

Неактивен

 

#2 22.04.2009 06:14:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здравствуйте, у меня такой вопрос

Думаю, это лучше делать в логике приложения. Простейшие случаи можно, конечно,
попробовать написать и запросами, но наверняка нужно будет что-то сложнее.

«-1»: найти родителя родителя
UPDATE menu m SET parent_id = (SELECT parent_id FROM menu WHERE id = m.parent_id) WHERE id = $id

С «+1» сложнее — придумайте алгоритм выбора родителя.

Неактивен

 

#3 22.04.2009 11:54:29

Борис
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 29

Re: Здравствуйте, у меня такой вопрос

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)

Неактивен

 

#4 22.04.2009 19:05:31

Борис
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 29

Re: Здравствуйте, у меня такой вопрос

Пожалуйста направте..

Неактивен

 

#5 22.04.2009 20:04:27

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Здравствуйте, у меня такой вопрос

Ну, например, так:

«найти брата»:
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


И все-таки, алгоритм надо придумать smile

Неактивен

 

#6 27.04.2009 15:51:39

Борис
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 29

Re: Здравствуйте, у меня такой вопрос

Спасибо получилось!

http://mycms.boris-k.net/
http://mycms.boris-k.net/admin/

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson