За последние 24 часа нас посетили 63106 программистов и 1738 роботов. Сейчас ищет 831 программист ...

Вопрос по созданию упорядоченных списков

Тема в разделе "PHP для новичков", создана пользователем akrinel, 26 фев 2009.

  1. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Есть список категорий порядок следования которых может задаваться пользователем.

    Все что я надумал сейчас изложено ниже.

    Допустим создано 10 категорий:

    id position
    3 1
    4 2
    6 3
    8 4
    12 5
    14 6
    56 7
    59 8
    73 9
    82 10

    0. Категория сдвигается на скололько-то позиций ближе к началу.
    Допустим категорию 56 перемещаем с позиции 7 на позицию 2:
    [sql]
    UPDATE `tcategories` SET `position`=`position`+1
    WHERE `position` > 1
    AND `position` < 8;
    UPDATE `tcategories` SET `position`=2 WHERE `id`=56;
    [/sql]

    1. Категория сдвигается на сколько-то позиций ближе к концу.
    Допустим категорию 6 перемещаем с позиции 3 на позицию 9:

    [sql]
    UPDATE `tcategories` SET `position`=`position`-1
    WHERE `position` > 3
    AND `position` < 10;
    UPDATE `tcategories` SET `position`=9 WHERE `id`=6;
    [/sql]

    2. Две соседние категории меняются местами.
    Допустим меняем местами 4 и 6, тогда:
    [sql]
    UPDATE `tcategories` SET `position`=3 WHERE `id`=8;
    UPDATE `tcategories` SET `position`=4 WHERE `id`=6;
    [/sql]


    3. Удаляем категорию.
    Если удаляем категорию 8, то:
    [sql]
    DELETE FROM `tcategories` WHERE `id`=8;
    UPDATE `tcategories` SET `position`=`position`-1 WHERE `position` > 4;
    [/sql]

    В категориях в принципе пофиг, пусть будет так.
    Но вполне возможно понадобится сделать подобную вещь для товаров. А их вполне может оказаться штучек 200-300 в одной категории. Получается при смене местами товара близкого к концу в начало будет 200+ изменения строк единовременно. Это угнетает.

    Есть ли более оптимальные решения для упорядочивания списков пользователем?

    P.S.
    Да я понимаю, что скорее всего товары будут сортироваться по цене, алфавиту и проч. Но вполне возможно нужна будет и такая функция, хочется сразу использовать корректный алгоритм.

    Спасибо всем кто прочел.
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    техническая мелочь - создавать временную таблицу и из нее уже обновлять исходную. один инсерт+один апдейт.

    а так - да, надо писать на БД свою реализацию индекса. )))
    начиная от простых двусвязных списков и далее в болото. ))
     
  3. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    а если просто UPDATE LOW_PRIORITY ставить? Или я неправильно понял назначение временной таблицы?
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    почти. если тебе пофиг на целостность и т.п.