ресортировка данных из MySQL

entonee

Новичок
привет всем - у меня Админ панель где выходят новости

сортируються по айди

надо добавить к каждой новости 2 стрелки - (вниз - наверх) чтоб можно было новость номер 1 поставить в списке после 3 например...

никак не придумаю как это сделать


Спасибо заранее
 

zerkms

TDD infected
Команда форума
Добавить поле order, сортировать по нему.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
предвкушаю вопрос, как добавить поле order ;)
 

entonee

Новичок
нет уважаемые
в этом и есть заминка

добавил ордер - сортирую по нему

например

1 a
2 b
3 c
4 d
5 e

теперь надо чтоб при нажатии стрелки вверх например на E(5) - он пошел вверх - чтоб стало

1 a
2 b
3 c
4 e
5 d
----

как то так....
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ты не знаешь что такое UPDATE?
 

zerkms

TDD infected
Команда форума
entonee
Обнови значение поля order. сделай значение этого поля равное 5 у d, и 4 у e, и сортируй
 

entonee

Новичок
знаю... но поднимая или уменьшая число на еденицу я получу вот это
1 a
2 b
3 c
4 d
4 e
------
разве нет? а мне надо чтоб это поле были уникальным
 

craz

Нестандартное звание
тебе же сказали добавить еще одну "колонку" и назвать ее order.

и ты даже сказал

добавил ордер - сортирую по нему

1 a
2 b
3 c
4 d
4 e
а тут сколько "колонок"?
 

craz

Нестандартное звание
кстати советую после добавления колонки забить туда значения кратные 10, а еще лучше 100 - потом поймете зачем)
 

entonee

Новичок
блин
да сделал уже.... я просто логику никак не прослежу... не надо мне кода.. словами напишите как это сделать

поля у меня

айди - нейм - ордер
1 - a - 1
2 - b - 2
3 - c - 3
4 - d - 4
--------------------------

сортирую по ордеру -

теперь админ нажал на то чтоб поднять новость с айди 4 наверх
беру его ордер(4) - уменьшаю на еденицу... делаю апдейт
---
получаем


айди - нейм - ордер
1 - a - 1
2 - b - 2
3 - c - 3
4 - d - 3
--------------------------
а мне надо чтоб у верхего (с) айди стало 4...
--------------------------

или.... мне надо запомнить ПОЛОЖЕНИЕ в ордере поля которое над ним... и которое под ним... и в зависимости от клика менять 2 значения... 2 запроса каждый раз.... просто подумал может есть какое-то более удобное решение?



Вообщем... спасибо всем..
 

SiZE

Новичок
1. Добавляешь поле позиция типа int
2. Ставишь на него индекс, что бы побыстрей искало
3. После нажатия стрелки: передаешь идентификатор новости и действие.
4. Ищешь новость, получаешь текущую позицию.
5. В зависимости от действия получаешь идентификатор и позицию соседней новости ( ... WHERE позиция>текущяя позиция ORDER BY позиция ASC LIMIT 1 ) или ( ... WHERE позиция<текущяя позиция ORDER BY позиция DESC LIMIT 1 )
6. Далее делаешь UPDATE ... SET позиция=позиция соседней новости WHERE id=текущей новости и UPDATE ... SET позиция=текущая позиция WHERE id=соседней новости
 

entonee

Новичок
............ дошло.... давно бы так....
спасибо


а то сидят..

я если ответа не знаю.. вообще не отвечаю... а если знаю стараюсь ответить максимально информативно....

а вы блин... сделай поле... знаешь что таоке апдейт...
 

craz

Нестандартное звание
за тем что мы не только сортируем/обновляем сортировку, но и добавлять можем лучше когда есть побольше места в отрезке между.

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

А такая возможность вполне себе возможна, когда станет пунктов ну 100 примерно замучаешься жать на стрелочки даже если AJAX
 

craz

Нестандартное звание
Я сочуствую тем кто сортировку делает вручную.
а сочувствую тем кто на стрелочки тыкает, был сайт с меню в 4 уровня вложенности в 100+ страниц и модулей и стрелочки...

Тут драг&дроп рулит конечно лучше ручного заполнения, но... короче тормозить будет это все дело, особенно если нестедсет проще ручками пробежаться...
 
Сверху