Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Сортировка страниц по ID в базе.


Автор: Heo 28.9.2005, 14:43
Мне надо сделать такую страницу в админке, в которой можно было бы пересортировать номера поля ID (он не является PRIMARY KEY). Как это реализовать?

Пример вывода страницы в админке:
Код

Название:    |   Действие:
-------------|--------------------
Название 1   |   [На самый верх][Выше][Ниже][В самый низ]
Название 2   |   [На самый верх][Выше][Ниже][В самый низ]
Название 3   |   [На самый верх][Выше][Ниже][В самый низ]
Название 4   |   [На самый верх][Выше][Ниже][В самый низ]

Автор: -=Ustas=- 28.9.2005, 15:36
В самом SQL-запросе делаешь
Код

".....твой запрос.... ORDER BY id ".$_GET['order'];

, где $_GET['order'] имеет два значения ASC и DESC. К урлу прикручиваешь эту переменную, типа ...var1=$var1&var2=$var2&order=ASC или DESC.

Автор: Heo 28.9.2005, 22:05
-=Ustas=-
Не совсем то что надо, к сожалению. Мне надо чтобы при нажатии на "действие", ID обновлялось у всех пунктов, и сортировалось так как я указал.

Автор: -=Ustas=- 29.9.2005, 09:46
Что-то я тебя не понял.

Автор: Darhazer 29.9.2005, 10:57
Для тех, кто не понял

Ест таблица

Код

Название:    |   Действие:
-------------|--------------------
Название 1   |   [На самый верх][Выше][Ниже][В самый низ]
Название 2   |   [На самый верх][Выше][Ниже][В самый низ]
Название 3   |   [На самый верх][Выше][Ниже][В самый низ]
Название 4   |   [На самый верх][Выше][Ниже][В самый низ]


При нажатие Ниже должна получиться таблица

Код

Название:    |   Действие:
-------------|--------------------
Название 2   |   [На самый верх][Выше][Ниже][В самый низ]
Название 1   |   [На самый верх][Выше][Ниже][В самый низ]
Название 3   |   [На самый верх][Выше][Ниже][В самый низ]
Название 4   |   [На самый верх][Выше][Ниже][В самый низ]


Делал уже такой скрипт... у меня должен бит готовий код, поищу, а то лен писать сново... ;)

P.S.
Нашел. Делано для PostgeSQL БД. Надо отредактировать запроси

Код

function moveUp($EntryId){

        $query = 'select "Id","Order" from "Pages" where "ParentId"='.$this->PageId.' order by "Order"';
        $result = pg_query($query) or die("cannot select");
        $ContentEntries = array();
        while ($row = pg_fetch_object($result)){
            $ContentEntries[] = array(
            'Id' => $row->Id,
            'Order' => $row->Order
            );
        }

        foreach ($ContentEntries as $key=>$ContentEntry){
            if ( $ContentEntry['Id'] == $EntryId ){
                $ThisEntry = $ContentEntries[$key];
                $PrevEntry = $ContentEntries[--$key];
                break;
            }
        }

        $query = '
            update "Pages" set 
                "Order" = '.$PrevEntry['Order'].'
            where "Id"='.$ThisEntry['Id'].'
        ';
        $result = pg_query($query) or die('cannot update');

        $query = '
            update "Pages" set 
                "Order" = '.$ThisEntry['Order'].'
            where "Id"='.$PrevEntry['Id'].'
        ';
        $result = pg_query($query) or die('cannot update');



        //        header('Location:adminpages.php');

    }  // $direction {up|down}


    function moveDown($EntryId){
        $query = 'select "Id","Order" from "Pages" where "ParentId"='.$this->PageId.' order by "Order"';
        $result = pg_query($query) or die("cannot select");
        $ContentEntries = array();
        while ($row = pg_fetch_object($result)){
            $ContentEntries[] = array(
            'Id' => $row->Id,
            'Order' => $row->Order
            );
        }

        foreach ($ContentEntries as $key=>$ContentEntry){
            if ( $ContentEntry['Id'] == $EntryId ){
                $ThisEntry = $ContentEntries[$key];
                $NextEntry = $ContentEntries[++$key];
                break;
            }
        }

        $query = '
            update "Pages" set 
                "Order" = '.$NextEntry['Order'].'
            where "Id"='.$ThisEntry['Id'].'
        ';
        $result = pg_query($query) or die('cannot update');

        $query = '
            update "Pages" set 
                "Order" = '.$ThisEntry['Order'].'
            where "Id"='.$NextEntry['Id'].'
        ';
        $result = pg_query($query) or die('cannot update');

        //        header('Location:adminpages.php');

    }  // $direction {up|down}

Автор: -=Ustas=- 29.9.2005, 11:08
Ну так это тебе надо изменять id-ишник при нажатии, и сортировку проводить по этому полю. Что тут еще не понятного?
Добавлено @ 11:12
По-моему твой код гемор, у тебя там на опускание и поднятие элемента две функции, хотя можно обойтись одной, элементарной, просто в УРЛ-е передавать либо 1 либо -1, и всё.

Автор: Heo 30.9.2005, 10:22
Цитата
у так это тебе надо изменять id-ишник при нажатии, и сортировку проводить по этому полю


Как изменить ID - это-то я понял. А как остальное отсортировать?

Автор: -=Ustas=- 30.9.2005, 10:36
Всмысле остальное? Сортировку по id делай и всё...

Автор: Heo 4.10.2005, 12:06
-=Ustas=-
Смотри, я нажал чтобы раздел2 переместился наверх. То есть он получает ID = 1. НО Раздел1 тоже имеет ID = 1. То есть надо сделать так, чтобы у всех разделов обновился ID
Добавлено @ 12:07
вот это я имел ввиду под словом "отсортировать"

Автор: -=Ustas=- 4.10.2005, 12:55
Ну пробегайся циклом по ID и переименовывай их в поряде возрастания, после их выборки. А вообще для подобных целей нужно заводить дополнительное поле, чтоб id-ишники записей не трогать.

Автор: Heo 11.10.2005, 15:27
То есть, допустим, таблица category имеет следущий вид:

Код

cat_id | cat_name | cat_desc | cat_sort_id


Сортировка идёт ао cat_sort_id. У меня есть 3 категории в таблице - cat1 (cat_id=1), cat2 (cat_id=2), cat3 (cat_id=3). Я присваиваю сроке cat3 в столбец cat_sort_id значение 1.

Какой надо сделать запрос (и цикл, как я понял) чтобы у строки cat1 сменить значение на 2, и у строки cat2 сменить значение на 3?

Можешь дать пример, пожалуйста?

Автор: americanets 20.12.2006, 09:23
есть база 

id nazvanie nazv_menu parent content

есть вложенные страницы на несколько уровней, как переместить запись в списке выше или ниже, те изменить id и соответственно parent как я понимаю

страница                  [выше] [ниже]
  подстраница          [выше] [ниже]
    подподстранца    [выше] [ниже]
страница                  [выше] [ниже]
страница                  [выше] [ниже]
страница                  [выше] [ниже]
  страница                [выше] [ниже]
страница                  [выше] [ниже]
 

Автор: Bikutoru 20.12.2006, 09:52
Очень сложно ответить на твой вопрос хотя бы по той причине, что нет никакой информации о том, как именно строится дерево. Возможно, что порядок страниц выводимых на одном уровне действительно задается на основе id, но нет никаких гарантий, что он формируется, например, на основе имени страницы. Так что ответить на этот вопрос нельзя до тех пора, пока нельзя увидеть код, с помощью которого это дерево строится...
Цитата(americanets @  20.12.2006,  10:23 Найти цитируемый пост)
как переместить запись в списке выше или ниже, те изменить id и соответственно parent как я понимаю

Вот id трогать не нужно. Нет никаких гарантий, что этот самый id в качестве внешнего ключа в других таблицах. Соответственно, если ты изменишь id у какой-то страницы, то ты можешь потерять какую-то информацию...

Если ты действительно хочешь получить ответ, то нужно описать проблему более развернуто...


Автор: americanets 20.12.2006, 11:24
щас код не помню весь, вечером посмотрю выложу, а так просто сортирую по id 

Автор: bondarenko_a 20.12.2006, 18:47
Менять можно только  parent 
Чтоб переместить выше, довольно просто как пример см ниже:
id name parent
1     A        0
2     B        0
3     C        2
4     D        2
5     E        4
Для наглядности:
A
B- 
  |C
  |D-
      |E
Чтоб переместить D наверх (при этом не потяряв его наследников) достаточно его парент сделать таким же как парент его парента =0 smile
A
B- 
  |C
D-
  |E

А что значит переместить вниз? Опиши конкретнее. В данном случае, Е перемещать некуда. Кто станет его парентом?


Автор: americanets 25.12.2006, 10:10
просто есть страницы к ним подстраницы, нужно их двигать выше ниже, вместе с parent ами и паренты отдельно 

Автор: americanets 25.12.2006, 10:14
да пример бы посмотреть хотелось, а вот как быть если еще и parent есть ? 

Автор: PARROT 25.12.2006, 11:09
americanets, ты опять за свое?  smile 

Автор: americanets 25.12.2006, 11:32
все больше не буду smile 

Вроде разобрался 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)