31.03.2015 / 17:05 | |
agreggor Пользователь Сейчас: Offline
Имя: юрий Регистрация: 25.07.2014
| kingdosya, этот ответ достоен оценки 2.5 баллов. 1. о поле id вообще не шла речь, я говорю о отдельном поле с индексом unique (в этом не виню, плохо объяснил))) 2. это хороший метод, но я и так думал об этом. а вот сложность в том, что значение поля unique, значит с изменением позиции могут возникнуть сложности... вообще, можно было бы не задавать индекс, но вдруг потом несколько полей окажутся с одинаковыми позициями? |
31.03.2015 / 17:18 | |
web_demon Супервизор Сейчас: Offline
Регистрация: 11.01.2010
| agreggor, пересчитывай другие поля. Если делаю шаг вверх или вниз - то меняешь местами значения текущего и предыдущего (следующего) элементов - это более-менее адекватное решение. А если делать чтоб можно было передвигать в произвольную позицию - приходится все пересчитывать. Обновляется кучу полей и делается куча запросов, сплошной говнокод. Так что если у кого есть красивое решение для второго случая, я бы тоже посмотрел.
Изменено web_demon (31.03 / 17:18) (всего 1 раз) |
31.03.2015 / 20:14 | |
Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| agreggor, предположим, что таблица такая, для ясности CREATE TABLE `test`.`sections` (
`id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`ord` INT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `ord_UNIQUE` (`ord` ASC));
Из твоего комментария я понял так, что при поднятии/опускании раздела в запросе ты хочешь присылать только новое значение для столбца ord и проверить, что оно уникальное. Я предлагаю сделать так: в запросе присылать два значения. Первое - индекс раздела, который ты перемещаешь, второе - индекс того раздела, с которым он меняется местами. Тогда код на сервере будет примерно такой (псевдокод, я не знаю, на чём ты пишешь): Пусть мы хотим опустить раздел 4 на 2 позиции ниже. В запросе на сервер посылаем параметры "first=4&second=6". Сервер это дело парсит и вызывает функцию swap_sections(4,6) function swap_sections(first, second)
transaction.begin()
execute("UPDATE sections set ord = -1 where ord = :first", first) //чтобы не нарушить ограничения UNIQ при обмене значений
execute("UPDATE sections set ord = :second where ord = :first", first, second)
execute("UPDATE sections set ord = :first where ord = :second", first, second)
transaction.commit()
end
Так как значения были UNIQ до обмена, то после обмена они останутся UNIQ |
1.04.2015 / 10:24 | |
ВитаминКО Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| в последних версиях джона это реализовано - поднятие/опускание тем, разделов
__________________
わからない!! |
1.04.2015 / 10:48 | |
agreggor Пользователь Сейчас: Offline
Имя: юрий Регистрация: 25.07.2014
| я пишу на php и sql :] попробую разобраться несмотря на присутствие пока не знакомых мне функций)))
|
6.04.2015 / 16:46 | |
Its_Your_Soul Пользователь Сейчас: Offline
Имя: Саша Откуда: Винница Регистрация: 29.08.2012
| Что нибуть работал с Host Cms ?
|
13.04.2015 / 08:17 | |
web_demon Супервизор Сейчас: Offline
Регистрация: 11.01.2010
| Its_Your_Soul, было дело однажды. Вспоминаю как страшный сон.
|
19.04.2015 / 13:55 | |
WertysORK Пользователь Сейчас: Offline
Имя: Никита Регистрация: 15.07.2014
| Решил заниматся созданием сайтов на Python с помощью Django(многие хвалили), скачал, установил , сервер настроен , а что дальше делать не знаю? по гугливши не нашел никакого руководства(только очень-очень старое).. не подскажите ли чего нибудь полезного?
|
19.04.2015 / 17:17 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| WertysORK, На офсайте же есть туториал. Или djbook.ru. Есть неплохие видеокурсы от PluralSight.
__________________
don't tread on me |
19.04.2015 / 18:33 | |
WertysORK Пользователь Сейчас: Offline
Имя: Никита Регистрация: 15.07.2014
| aRiGaTo, спасибо
|