Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таблица с порядком вывода записей 
:(
    Опции темы
RomanEEP
Дата 7.5.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Есть таблица, где хранятся строки:
PATHS
--------
ID: Integer
Name: VarChar

Данные:
1      Path1
4      Path67
5      TestData

Как нужно изменить структуру таблицы, чтобы там хранилась инфа в каком порядке выводить записи? К примеру, чтобы юзер смог передвинуть третью строку на первое место, чтобы таблица стала такой:

Данные:
5      TestData
1      Path1
4      Path67

Мне приходит в голову вариант менять между собой все поля 2-х записей при перемещении строк по списку. Правильно ли это?

PM MAIL   Вверх
Роман
Дата 7.5.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Достаточна замена только второго поля Name, так как сортировка идет по полю ID


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
RomanEEP
Дата 7.5.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Как лучше сделать эту замену - на клиенте или через SQL. И если через SQL, то как?
PM MAIL   Вверх
Zloxa
Дата 7.5.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Достаточно добавить поле order и, в случае перемещения записи менять лишь его значения.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
RomanEEP
Дата 7.5.2009, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(Zloxa @  7.5.2009,  16:05 Найти цитируемый пост)
Достаточно добавить поле order и, в случае перемещения записи менять лишь его значения.

Пусть будет таблица
ID Name Order
6  Path1  1
8  Path2  2
9  Path3  3
на что мне поменять Order, чтобы первую строку поставить на второе место?

PM MAIL   Вверх
Zloxa
Дата 7.5.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(RomanEEP @  7.5.2009,  16:27 Найти цитируемый пост)
на что мне поменять Order, чтобы первую строку поставить на второе место?

на (2+3)/2 ;))

либо поменять значения odrer для id = 6 и id = 8

Это сообщение отредактировал(а) Zloxa - 7.5.2009, 16:44


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
RomanEEP
Дата 7.5.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(Zloxa @  7.5.2009,  16:42 Найти цитируемый пост)
либо поменять значения odrer для id = 6 и id 

Ага))) а если у меня там 10000 строк а не 2, у всех заменять?

PM MAIL   Вверх
Роман
Дата 7.5.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Zloxa, я про id и писал smile

RomanEEP, как сделать через sql - не знаю. Пока вижу только программный путь.

P. S. добавление лишних полей - не лучшая практика.


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
RomanEEP
Дата 7.5.2009, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Но в любом случае делать придется через SQL, потому что полей может быть много и там здоровые BLOB поля могут затесаться - их нехорошо гонять через клиента
PM MAIL   Вверх
Zloxa
Дата 7.5.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(RomanEEP @  7.5.2009,  16:54 Найти цитируемый пост)
Ага))) а если у меня там 10000 строк а не 2, у всех заменять?

в смысле первую строку поставить на десятитысячную позицию? Выходит что так.  
можно конечно выстроить список по id, prior_id, тогда модифицировать просто будет, но выбирать - жопа.

Цитата(Роман @  7.5.2009,  16:54 Найти цитируемый пост)
я про id и писал

id трогать нельзя, это святое. на id могут fk смотреть(на то он и id), тогда их местами поменять - жопа полная.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
RomanEEP
Дата 7.5.2009, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(Zloxa @  7.5.2009,  17:09 Найти цитируемый пост)
id трогать нельзя, это святое. на id могут fk смотреть(на то он и id), тогда их местами поменять - жопа полная.
 
честно говоря, в моем случае можно, у меня на id ничего не ссылается, это PK, который я создал только для удобства редактирования таблицы, чтобы не создават естественный ключ по 2 другим полям
PM MAIL   Вверх
Deniz
Дата 8.5.2009, 06:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



RomanEEP, а в чем проблема то?
В дополнение к предположению о добавлении поля Order.
Допустим у нас "дырок" в поле Order нет, т.е. все номера по порядку.
Представь что это обычный массив, и тебе нужно поменять 4 и 10 строку местами.
1. Order №4 во временную переменную
2. Order №4 = Order #10
3. Order №10 = временная переменная

Если нужно запись с Order = 4 поставить на место между 100 и 101, то
1. Берем id записи с Order=4
2. update table set order = order-1 where order between 5 and 100
3. update table set order = 100 where id = <Id для Order4>
Если записей много и перенос "дальний", то пункт 2 может занять много времени.
Аналогично для переноса 100 в 4
1. ...
2. update table set order = order+1 where order between 4 and 99
3. ...


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
RomanEEP
Дата 8.5.2009, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Deniz, 

Пусть будет таблица
ID Name Order
6    Path1  1
8    Path2  2
9    Path3  3
16  Pathz  4
18  Pathe  5
29  Pathq  6
36  Pathw 7
48  Pathe  8
49  Pathr   9

Как мне поставить первую строчку между строками 5 и 6?
PM MAIL   Вверх
Deniz
Дата 8.5.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



RomanEEP, смотри алгоритм выше.
Код

x = 1 - что перемещаем
y = 5 - куда перемещаем
v = ID(x) = 6
update table set order = order-1 where order between x+1 and y
update table set order = y where id = v
как-то так


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 8.5.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(RomanEEP @  8.5.2009,  08:18 Найти цитируемый пост)
Как мне поставить первую строчку между строками 5 и 6? 

чем такой ваиант не устроил?
Код

create table test_order
(id number
,name varchar2(20)
,ord number)
/
 
insert into test_order values (10,'Path1',1);
insert into test_order values (20,'Path2',2);
insert into test_order values (30,'Path3',3);
insert into test_order values (40,'Path4',4);
insert into test_order values (50,'Path5',5);
insert into test_order values (60,'Path5',6);
insert into test_order values (70,'Path5',7);

select * from test_order order by ord;
 
        ID NAME                        ORD
---------- -------------------- ----------
        10 Path1                         1
        20 Path2                         2
        30 Path3                         3
        40 Path4                         4
        50 Path5                         5
        60 Path5                         6
        70 Path5                         7
 
7 rows selected

update test_order
   set ord = (select avg(t.ord)
                from test_order t
               where t.id in (50, 60))
 where id = 10;
 
1 row updated

select * from test_order order by ord;
 
        ID NAME                        ORD
---------- -------------------- ----------
        20 Path2                         2
        30 Path3                         3
        40 Path4                         4
        50 Path5                         5
        10 Path1                       5,5
        60 Path5                         6
        70 Path5                         7


Это сообщение отредактировал(а) DimW - 8.5.2009, 09:10
PM MAIL ICQ   Вверх
Deniz
Дата 8.5.2009, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



DimW, при частых перестановках число знаков после запятой стремится к бесконечности.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Zloxa
Дата 8.5.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Deniz, Раз уж ты отвечаешь за топик стартера, может заодно скажешь, зачем часто переставлять? Мне вот, лично, доводилось сталкиваться лишь с тем, что порядок надо определить один раз...  ну может потом, еще пару раз откорректировать. 

И зачем вообще нужен кастом порядок?
Сдается мне, ТС желает почесать правое ухо левой рукой smile)


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Deniz
Дата 8.5.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(Zloxa @  8.5.2009,  14:00 Найти цитируемый пост)
Deniz, Раз уж ты отвечаешь за топик стартера...
ни коем образом.  smile 
Просто, лично мне, не нравится в поле order видеть дробные числа.
По поводу, для чего это нужно сам не знаю, подождем что скажет ТС.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 8.5.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Deniz @  8.5.2009,  10:46 Найти цитируемый пост)
DimW, при частых перестановках число знаков после запятой стремится к бесконечности.

отсюда следует только то, что рано или поздно оно преполнится и обнулится. 
вообще сама задача высасана из пальца, лично мне сложно представить жизненную ситуацию в которой это было бы необходимо.

Добавлено через 1 минуту и 24 секунды
Цитата(Deniz @  8.5.2009,  11:56 Найти цитируемый пост)
не нравится в поле order видеть дробные числа.

а их не нужно видеть пользователю, это служебное поле, в котором полезной инфы для юзера нет.
PM MAIL ICQ   Вверх
RomanEEP
Дата 8.5.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(DimW @  8.5.2009,  11:58 Найти цитируемый пост)
DimW, при частых перестановках число знаков после запятой стремится к бесконечности.отсюда следует только то, что рано или поздно оно преполнится и обнулится. вообще сама задача высасана из пальца, лично мне сложно представить жизненную ситуацию в которой это было бы необходимо.

Можете запустить калькулятор и убедиться, что можно выйти за пределы точности за пару десятков перестановок

Задача чисто практическая есть база вопросов, разбитых на разделы
и есть таблица, в которой записано сколько вопросов из какого раздела брать. Соответсвенно нужно дать возм-ть задавать очередность разделов во время теста
PM MAIL   Вверх
Deniz
Дата 8.5.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(DimW @  8.5.2009,  14:58 Найти цитируемый пост)
а их не нужно видеть пользователю, это служебное поле, в котором полезной инфы для юзера нет. 
так я вроде и не пользователь  smile 


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 8.5.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Задача чисто практическая

приктический пример:
Код

create table test_order
(id number
,name varchar2(100)
,ord number);

insert into test_order values (10,'Path1',1);
insert into test_order values (20,'Path2',2);
insert into test_order values (30,'Path3',3);
insert into test_order values (40,'Path4',4);
insert into test_order values (50,'Path5',5);
insert into test_order values (60,'Path5',6);
insert into test_order values (70,'Path5',7);

select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        10 Path1                                                                                     1
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        60 Path5                                                                                     6
        70 Path5                                                                                     7
 

update test_order
   set ord = (select t.ord
                from test_order t
               where t.id = 60)
 where id = 10;
 
update test_order
   set ord = ord + 1
 where id = 60 or ord > (select ord from test_order where id = 60);
 
SQL> select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        10 Path1                                                                                     6
        60 Path5                                                                                     7
        70 Path5                                                                                     8

PM MAIL ICQ   Вверх
RomanEEP
Дата 8.5.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(DimW @  8.5.2009,  12:31 Найти цитируемый пост)
приктический пример:

то что нужно!
И еще вопрос, если бы в таблице было бы 100.000 записей и надо было бы сдвинуть 50.000 запись, то пришлось бы отредактировать 50.000 записей. Может быть есть более оптимальный подход?
PM MAIL   Вверх
DimW
Дата 8.5.2009, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(RomanEEP @  8.5.2009,  12:42 Найти цитируемый пост)
Может быть есть более оптимальный подход?

из за 100 000 я бы особо не переживал. но если десятки миллионов, то можно вычислять куда меньше двигать - вверх или вниз. отрицательные числа вас меньше беспокоят чем дробные?  smile 
других вариантов невижу.
PM MAIL ICQ   Вверх
DimW
Дата 8.5.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



вычислить можно примерно так:
Код

select * from test_order order by ord;
 
        ID NAME                                                                                    ORD
---------- -------------------------------------------------------------------------------- ----------
        80 Path1                                                                                     1
        20 Path2                                                                                     2
        30 Path3                                                                                     3
        40 Path4                                                                                     4
        50 Path5                                                                                     5
        10 Path1                                                                                     6
        60 Path5                                                                                     7
        70 Path5                                                                                     8
        90 Path2                                                                                     9
       100 Path3                                                                                    10
       110 Path4                                                                                    11
       120 Path5                                                                                    12
       130 Path5                                                                                    13
       140 Path5                                                                                    14
 
select case when x > (select ord from test_order where id = 20) then 'up' else 'down' end zzz
  from (select avg(ord) x
          from test_order);
 
ZZZ
------------------------------
up


select case when x > (select ord from test_order where id = 120) then 'up' else 'down' end zzz
  from (select avg(ord) x
          from test_order);

ZZZ
------------------------------
down


Это сообщение отредактировал(а) DimW - 8.5.2009, 13:14
PM MAIL ICQ   Вверх
Zloxa
Дата 8.5.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 11
Всего: 161



Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Соответсвенно нужно дать возм-ть задавать очередность разделов во время теста 

Другими словами очередность определяется один лишь раз, при формировании списка вопросов теста ;) За все время жизни теста, практически не модифицируется. Вероятность что мы уйдем в оверфлоу ничтожно мала
Цитата(RomanEEP @  8.5.2009,  12:02 Найти цитируемый пост)
Можете запустить калькулятор и убедиться, что можно выйти за пределы точности за пару десятков перестановок

Код

SQL> declare
  2    val number:= 1;
  3    cntr number:= 0;
  4  begin
  5    loop exit when val/2=val;
  6      cntr := cntr +1;
  7      val := val/2;
  8    end loop;
  9    dbms_output.put_line(cntr);
 10  end;
 11  /
 
432
 
PL/SQL procedure successfully completed


Если же вы хотите менять порядок следования вопросов при каждом тестировании, сохранять этот порядок в базе - глупость несусветная.
Цитата(Deniz @  8.5.2009,  12:17 Найти цитируемый пост)
так я вроде и не пользователь

Если ты смотришь на результат запроса, ты выступаешь в роли пользователя. А пользователю смотреть на это поле не нужно smile

Это сообщение отредактировал(а) Zloxa - 8.5.2009, 14:08


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Роман
Дата 9.5.2009, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Создаем

Код

CREATE TABLE table1 (
id INT NOT NULL AUTO_INCREMENT ,
name TEXT,
ord INT NOT NULL ,
PRIMARY KEY ( id ) 
)


Наполняем

Код

    id    name    ord
    1    text0    1
    2    text1    2
    3    text2    3
    4    text3    4
    5    text4    5
    6    text5    6
    7    text6    7
    8    text7    8


Меняем, например 3ю с 7й позицией:

Код

UPDATE table1
SET ord = IF(ord = 3, 7, 3)
WHERE ord IN (3, 7)


Получаем

Код

    id    name    ord
    1    text0    1
    2    text1    2
    3    text2    7
    4    text3    4
    5    text4    5
    6    text5    6
    7    text6    3
    8    text7    8


Это сообщение отредактировал(а) Роман - 9.5.2009, 05:12


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
RomanEEP
Дата 9.5.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: нет
Всего: 8



Цитата(Роман @  9.5.2009,  04:48 Найти цитируемый пост)
Меняем, например 3ю с 7й позицией:

Я уже несколько раз показал в примерах, что поменять строки местами - не проблема. Проблема передвинуть одну строчку на другое место
PM MAIL   Вверх
Роман
Дата 9.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 9.7.2006

Репутация: нет
Всего: 1



Удалим id
Код

ALTER TABLE `table1` DROP `id`



Цитата(RomanEEP @  9.5.2009,  07:21 Найти цитируемый пост)
Я уже несколько раз показал в примерах, что поменять строки местами - не проблема. Проблема передвинуть одну строчку на другое место 


Начальные данные 
Код

    name    ord
    text0    0
    text1    1
    text2    2
    text3    3
    text4    4
    text5    5
    text6    6
    text7    7


Перемещаем 3ю строчку в 7ю позицию
Код

UPDATE table1
SET ord = IF(ord = 3, 7, ord-1)
WHERE ord BETWEEN 3 AND 7


Получаем
Код

    name    ord
    text0    0
    text1    1
    text2    2
    text4    3
    text5    4
    text6    5
    text7    6
    text3    7


Так?


--------------------
Жизнь -  это последствия от последствий.
user posted image
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0981 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.