![]() |
|
Модераторы: LSD |
![]()
|
|
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Есть таблица, где хранятся строки:
PATHS -------- ID: Integer Name: VarChar Данные: 1 Path1 4 Path67 5 TestData Как нужно изменить структуру таблицы, чтобы там хранилась инфа в каком порядке выводить записи? К примеру, чтобы юзер смог передвинуть третью строку на первое место, чтобы таблица стала такой: Данные: 5 TestData 1 Path1 4 Path67 Мне приходит в голову вариант менять между собой все поля 2-х записей при перемещении строк по списку. Правильно ли это? |
|||
|
||||
| Роман |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 9.7.2006 Репутация: нет Всего: 1 |
Достаточна замена только второго поля Name, так как сортировка идет по полю ID
-------------------- Жизнь - это последствия от последствий. |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Как лучше сделать эту замену - на клиенте или через SQL. И если через SQL, то как?
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Достаточно добавить поле order и, в случае перемещения записи менять лишь его значения.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
||||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
на (2+3)/2 ;)) либо поменять значения odrer для id = 6 и id = 8 Это сообщение отредактировал(а) Zloxa - 7.5.2009, 16:44 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Ага))) а если у меня там 10000 строк а не 2, у всех заменять? |
|||
|
||||
| Роман |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 9.7.2006 Репутация: нет Всего: 1 |
Zloxa, я про id и писал
RomanEEP, как сделать через sql - не знаю. Пока вижу только программный путь. P. S. добавление лишних полей - не лучшая практика. -------------------- Жизнь - это последствия от последствий. |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Но в любом случае делать придется через SQL, потому что полей может быть много и там здоровые BLOB поля могут затесаться - их нехорошо гонять через клиента
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
в смысле первую строку поставить на десятитысячную позицию? Выходит что так. можно конечно выстроить список по id, prior_id, тогда модифицировать просто будет, но выбирать - жопа. id трогать нельзя, это святое. на id могут fk смотреть(на то он и id), тогда их местами поменять - жопа полная. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
честно говоря, в моем случае можно, у меня на id ничего не ссылается, это PK, который я создал только для удобства редактирования таблицы, чтобы не создават естественный ключ по 2 другим полям |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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. ... -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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? |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
RomanEEP, смотри алгоритм выше.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 2 Всего: 44 |
чем такой ваиант не устроил?
Это сообщение отредактировал(а) DimW - 8.5.2009, 09:10 |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |