Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.244.201] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
Интересует способ перестроения пользовательской сортировки
Исходные данные (упрощенно): 1) Таблица "Рубрикаторы" Id - SERIAL Name - VARCHAR 2) Таблица "Сортировки" RubId - INTEGER SortKey - INTEGER Вторая таблица нужна для того, чтобы предполагаемый пользователь мог сохранять нужный ему порядок сортировки "рубрикаторов". Изначально Id=RubId=SortKey Вопрос: каким запросом(ами) произвести модификацию таблицы "Сортировки", по образцу: RubId | KeySort --------------- 1 | 1 2 | 2 3 | 3 <─┐ 4 | 4 │ 5 | 5 │ 6 | 6 │ 7 | 7 ──┘ 8 | 8 9 | 9 --------------- Нужно перенести 7-ю позицию на 3-е место: RubId | KeySort --------------- 1 | 1 2 | 2 3 | 4 4 | 5 5 | 6 6 | 7 7 | 3 8 | 8 9 | 9 --------------- |
Сообщ.
#2
,
|
|
|
Для MySQL:
UPDATE test SET SortKey = SortKey + CASE SortKey WHEN @from THEN @to-@from ELSE sign(@from-@to) END WHERE SortKey BETWEEN LEAST(@from,@to) AND GREATEST(@from,@to); |
Сообщ.
#3
,
|
|
|
Цитата Akina @ Для MySQL: Пасиб, поразбираюсь! А это любой перенос сработает, я имею ввиду вниз, вврерх, в первую, в последнюю позиции? |
Сообщ.
#4
,
|
|
|
Поразбирайся. Все вопросы сами отпадут.
|
Сообщ.
#5
,
|
|
|
Гуд, благодарю!
|
Сообщ.
#6
,
|
|
|
Запрос для понимания сути происходящего:
SET @from=3; SET @to=5; SELECT *, SortKey + CASE SortKey WHEN @from THEN @to-@from ELSE sign(@from-@to) END FROM test -- WHERE SortKey BETWEEN LEAST(@from,@to) AND GREATEST(@from,@to) -- ORDER BY id ; Повторять, произвольно меняя значения переменных. PS. Предполагается, что у SortKey нумерация непрерывная, а @from и @to входят в список имеющихся в таблице значений. |