Вниз  Общие вопросы
- 31.03.2015 / 17:05
agreggor
  Пользователь

agreggor 
Сейчас: Offline
kingdosya, этот ответ достоен оценки 2.5 баллов.
1. о поле id вообще не шла речь, я говорю о отдельном поле с индексом unique (в этом не виню, плохо объяснил)))
2. это хороший метод, но я и так думал об этом. а вот сложность в том, что значение поля unique, значит с изменением позиции могут возникнуть сложности... вообще, можно было бы не задавать индекс, но вдруг потом несколько полей окажутся с одинаковыми позициями? :-D
- 31.03.2015 / 17:18
web_demon
  Супервизор

web_demon 
Сейчас: Offline
agreggor, пересчитывай другие поля. Если делаю шаг вверх или вниз - то меняешь местами значения текущего и предыдущего (следующего) элементов - это более-менее адекватное решение. А если делать чтоб можно было передвигать в произвольную позицию - приходится все пересчитывать. Обновляется кучу полей и делается куча запросов, сплошной говнокод.
Так что если у кого есть красивое решение для второго случая, я бы тоже посмотрел.

Изменено web_demon (31.03 / 17:18) (всего 1 раз)
- 31.03.2015 / 20:14
Freddy
  Пользователь

Freddy 
Сейчас: Offline
agreggor, предположим, что таблица такая, для ясности
  1. CREATE TABLE `test`.`sections` (
  2.   `id` INT NOT NULL,
  3.   `name` VARCHAR(45) NOT NULL,
  4.   `ord` INT NOT NULL,
  5.   PRIMARY KEY (`id`),
  6.   UNIQUE INDEX `ord_UNIQUE` (`ord` ASC));
Из твоего комментария я понял так, что при поднятии/опускании раздела в запросе ты хочешь присылать только новое значение для столбца ord и проверить, что оно уникальное.

Я предлагаю сделать так: в запросе присылать два значения. Первое - индекс раздела, который ты перемещаешь, второе - индекс того раздела, с которым он меняется местами. Тогда код на сервере будет примерно такой (псевдокод, я не знаю, на чём ты пишешь):
Пусть мы хотим опустить раздел 4 на 2 позиции ниже. В запросе на сервер посылаем параметры "first=4&second=6". Сервер это дело парсит и вызывает функцию swap_sections(4,6)
  1. function swap_sections(first, second)
  2.     transaction.begin()
  3.     execute("UPDATE sections set ord = -1 where ord = :first", first) //чтобы не нарушить ограничения UNIQ при обмене значений
  4.     execute("UPDATE sections set ord = :second where ord = :first", first, second)
  5.     execute("UPDATE sections set ord = :first where ord = :second", first, second)
  6.     transaction.commit()
  7. end
Так как значения были UNIQ до обмена, то после обмена они останутся UNIQ
- 1.04.2015 / 10:24
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Offline
в последних версиях джона это реализовано - поднятие/опускание тем, разделов
__________________
 わからない!!
- 1.04.2015 / 10:48
agreggor
  Пользователь

agreggor 
Сейчас: Offline
я пишу на php и sql :] попробую разобраться несмотря на присутствие пока не знакомых мне функций)))
- 6.04.2015 / 16:46
Its_Your_Soul
  Пользователь

Its_Your_Soul 
Сейчас: Offline
Что нибуть работал с Host Cms ?
- 13.04.2015 / 08:17
web_demon
  Супервизор

web_demon 
Сейчас: Offline
Its_Your_Soul, было дело однажды. Вспоминаю как страшный сон.
- 19.04.2015 / 13:55
WertysORK
  Пользователь

WertysORK 
Сейчас: Offline
Решил заниматся созданием сайтов на Python с помощью Django(многие хвалили), скачал, установил , сервер настроен , а что дальше делать не знаю? по гугливши не нашел никакого руководства(только очень-очень старое).. не подскажите ли чего нибудь полезного?
- 19.04.2015 / 17:17
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
WertysORK, На офсайте же есть туториал. Или djbook.ru. Есть неплохие видеокурсы от PluralSight.
__________________
 don't tread on me
- 19.04.2015 / 18:33
WertysORK
  Пользователь

WertysORK 
Сейчас: Offline
aRiGaTo, спасибо
Наверх  Всего сообщений: 379
Фильтровать сообщения
Поиск по теме
Файлы топика (15)