Есть таблица в MySQL с полями id(int,autoincrement), [много не относящихся к вопросу полей], pos(int)
.
Столбец pos всегда целое число по порядку 1,2,3.... По нему делается ORDER by pos
и записи выводятся в нужном порядке. Необходимо реализовать настраиваемый порядок вывода записей.
Посоветуйте, пожалуйста, как реализовать 3 вещи:
$db->create($pos_m)
$db->move($id, $pos_n, $pos_m)
id db->remove($id)
При этих действиях нужно, чтобы pos у всех остальных записей пересчитывался по порядку заново, чтобы не было разрывов. Если запись помещается в середину, все, что больше сдвигались на +1 и т.д. Pos всегда должен отражать реальный номер по порядку, а не как предложили делать тут.
Записей таких не будет много, и такие действия не будут происходить часто, поэтому здесь не нужна производительность.
Если есть возможность реализовать это на чистом SQL, здорово, но можно переложить часть работы на PHP и сделать несколько запросов.
Вставка
INSERT INTO mytable (pos) VALUES (:pos);
UPDATE mytable SET
pos = pos + 1
WHERE
pos => :pos AND
id <> LAST_INSERT_ID();
Перенос
UPDATE mytable SET
pos = pos + IF(:old_pos < :new_pos, -1, 1)
WHERE
pos BETWEEN :old_pos + 1 AND :new_pos OR
pos BETWEEN :new_pos AND :old_pos - 1
UPDATE mytable SET
pos = :new_pos
WHERE
id = :id;
Необходимость пересчитывать pos
при удалении для меня под вопросом. Разрывы на сортировку не влияют. Но если нужно, то делается так
UPDATE mytable SET
pos = pos - 1
WHERE
pos > (SELECT pos FROM mytable WHERE id = :id);
DELETE FROM mytable WHERE id = :id;
Все мои манипуляции подразумевают, что для поля pos
не создан уникальный ключ
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста, как я могу отправить параметры рекапчи на сервер(php), с помощью ajaxНиже привел пример, как я думал, это сделать
Следующим кодом формируется таблица в html и выводятся данные из массива:
Создаю bitmap, пишу на нем строку, конвертирую в wxImage, и пытаюсь использовать как текстуру
Как сделать проверку, чтобы при вводе в Edit Control определенного значения, оно становилось красным и нельзя было нажать на кнопкуТо есть значение...