Сортиране на резултати от базата?

nasibg

Registered
Здравейте как да направя такова сортиране на резултатите от базата? Ето за какво става на въпрос:

1. http://i280.photobucket.com/albums/kk167/nzhul/system.jpg
2. http://www.wm-bg.com/images/admin-2.jpg
 
В съответната таблица в базата данни, където съхраняваш продуктите, добавяш още една колона, която ще съдржа число по което сортираш.

Например (по картинката със страниците)

Код:
create table page (
   id int(10) unsigned not null primary key auto_increment,
   title varchar(100) not null unique,
   body text,
   sort_index int(10) not null default 0
);

INSERT into `page` VALUES 
                  (1, 'Галерия', NULL, 2),
                  (2, 'За нас', NULL, 4),
                  (3, 'Начало', NULL, 1);

В последствие, когато изкарваш списъка на страниците, сортираш по sort_index asc

Код:
SELECT * from `page` order by `sort_index`

Онези стрелки с които местиш (преподреждаш) страниците, водят към РНР скрипт, който обновява sort_index на всички елементи в таблицата. Да кажем, че "Галерия" Искаш да го преместиш от позиция 2 на позиция 3:

Код:
<a href="reorder.php?id=1&current_position=2&direction=up">премести с една позиция напред</a> 

<a href="reorder.php?d=1&current_position=2&direction=down">премести с една позиция назад</a> 


$current_position = (int) $_GET['current_position'];
$id = (int) $_GET['id'];

if($direction == 'up'){

    //първо местиш елемента, чийто място искаме да заемеме
    UPDATE page set sort_index = sort_index + 1 WHERE sort_index =  ($current_position - 1);

    //сега обновяваш sort_index на елемента, който реално искаме да преместиме
    UPDATE page set sort_index = sort_index - 1 WHERE id = $id;

}elseif($direction == 'down'){
    //първо местиш елемента, чийто място искаме да заемеме
    UPDATE page set sort_index = sort_index - 1 WHERE sort_index =  ($current_position + 1);

    //сега обновяваш sort_index на елемента, който реално искаме да преместиме
    UPDATE page set sort_index = sort_index + 1 WHERE id = $id;
}


Или на кратко - когато искаш да промениш позицията на един елемент, трябва първо да промениш позицията на елемента преди/след него и тогава и неговата позиция.
 

Back
Горе