Форум: "Начинающим";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];
ВнизУказать позицию для записи таблицы БД Найти похожие ветки
← →
Chuck Bass (2012-01-20 11:17) [0]Есть таблица Documents(ID[AutoInc], Name[FixedChar], .., Order[Integer]).
Поле Order определяет позицию записи при отображении. Нужно написать функцию которая бы позволяла менять позицию записи. Как это лучше реализовать?
← →
Anatoly Podgoretsky © (2012-01-20 13:15) [1]> Chuck Bass (20.01.2012 11:17:00) [0]
А что значит менять позицию?
← →
Ega23 © (2012-01-20 13:31) [2]Есть запись A, есть запись B. Надо поменять их местами.
Update table set Order = A.Order where ID=B.ID;
Update table set Order = B.Order where ID=A.ID;
RefreshData;
← →
Chuck Bass (2012-01-20 13:33) [3]
> Ega23 ©
Спасибо
← →
Самуилыч (2012-01-20 16:53) [4]Как быть, если на поле Order наложено требование уникальности?
← →
Ega23 © (2012-01-20 18:05) [5]
> Как быть, если на поле Order наложено требование уникальности?
Зависит от СУБД. Например, завести сиквенс и при добавлении новой записи вставлять очередное значение.
← →
Самуилыч (2012-01-20 18:23) [6]
> Ega23 © (20.01.12 18:05) [5]
При insert все очевидно, а как поменять местами order в 2-х записях?
Решение "в лоб" тоже очевидно:
Запоминаем order в записях 1 и 2
В записи 1 ставим новый order
В записи 2 ставим запомненный order записи 1
В записи 1 ставим запомненный order записи 2
Но как-то это некрасиво. Неужели нет более элегантного способа?
← →
Ega23 © (2012-01-20 21:10) [7]
> При insert все очевидно, а как поменять местами order в
> 2-х записях?
2 команды Update, это очевидно.
> Неужели нет более элегантного способа?
ИМХО, это наиболее элегантный.
← →
sniknik © (2012-01-20 22:16) [8]> наложено требование уникальности?
MSSQLUPDATE table
SET Order=t2.Order
FROM table t1 INNER JOIN (SELECT Order FROM table WHERE Order IN (2, 3)) t2 ON (t1.Order<>t2.Order)
WHERE t1.Order IN (2, 3)
← →
sniknik © (2012-01-21 00:08) [9]или проще, на том же MSSQL
UPDATE table
SET Order=CASE WHEN Order=2 THEN 3 ELSE 2 END
WHERE Order IN (2,3)
← →
Самуилыч (2012-01-21 13:07) [10]
> Ega23 © (20.01.12 21:10) [7]
Если order уникально, то первая update даст ошибку.
> sniknik © (21.01.12 00:08) [9]
Это если order заранее известен. А если нет?
Вот есть 2 записи:
ID ORDER
3 6
4 7
ID - ключ. ORDER - уникально. Как поменять местами ORDER, если заранее его значения неизвестны?
← →
sniknik © (2012-01-21 13:24) [11]что то обязательно известно, либо ORDER либо ID, иначе, что менять? не известно одно, строй условие по другому, принцип не меняется.
← →
sniknik © (2012-01-21 13:31) [12]например, вариант 3
UPDATE table
SET Order=(SELECT Order FROM table t1 WHERE ID IN (2, 3) AND t1.ID<>table.ID)
WHERE ID IN (2, 3)
← →
Самуилыч (2012-01-21 14:39) [13]
> sniknik © (21.01.12 13:31) [12]
Спасибо. Это надо запомнить.
← →
Ega23 © (2012-01-22 23:40) [14]Блин. Ведь раньше делал эту фигню.
Действительно простоupdate ttt
set OrderFld = case Order Fld when N then M when M then N end
where OrderFld in (N, M)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c