![]() |
|
Модераторы: 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 |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
DimW, при частых перестановках число знаков после запятой стремится к бесконечности.
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Deniz, Раз уж ты отвечаешь за топик стартера, может заодно скажешь, зачем часто переставлять? Мне вот, лично, доводилось сталкиваться лишь с тем, что порядок надо определить один раз... ну может потом, еще пару раз откорректировать.
И зачем вообще нужен кастом порядок? Сдается мне, ТС желает почесать правое ухо левой рукой -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
ни коем образом.
Просто, лично мне, не нравится в поле order видеть дробные числа. По поводу, для чего это нужно сам не знаю, подождем что скажет ТС. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 2 Всего: 44 |
отсюда следует только то, что рано или поздно оно преполнится и обнулится. вообще сама задача высасана из пальца, лично мне сложно представить жизненную ситуацию в которой это было бы необходимо. Добавлено через 1 минуту и 24 секунды а их не нужно видеть пользователю, это служебное поле, в котором полезной инфы для юзера нет. |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Можете запустить калькулятор и убедиться, что можно выйти за пределы точности за пару десятков перестановок Задача чисто практическая есть база вопросов, разбитых на разделы и есть таблица, в которой записано сколько вопросов из какого раздела брать. Соответсвенно нужно дать возм-ть задавать очередность разделов во время теста |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 2 Всего: 44 |
приктический пример:
|
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
то что нужно! И еще вопрос, если бы в таблице было бы 100.000 записей и надо было бы сдвинуть 50.000 запись, то пришлось бы отредактировать 50.000 записей. Может быть есть более оптимальный подход? |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 2 Всего: 44 |
||||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 2 Всего: 44 |
вычислить можно примерно так:
Это сообщение отредактировал(а) DimW - 8.5.2009, 13:14 |
|||
|
||||
| Zloxa |
|
||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Другими словами очередность определяется один лишь раз, при формировании списка вопросов теста ;) За все время жизни теста, практически не модифицируется. Вероятность что мы уйдем в оверфлоу ничтожно мала
Если же вы хотите менять порядок следования вопросов при каждом тестировании, сохранять этот порядок в базе - глупость несусветная. Если ты смотришь на результат запроса, ты выступаешь в роли пользователя. А пользователю смотреть на это поле не нужно Это сообщение отредактировал(а) Zloxa - 8.5.2009, 14:08 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||
|
|||||||
| Роман |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 9.7.2006 Репутация: нет Всего: 1 |
Создаем
Наполняем
Меняем, например 3ю с 7й позицией:
Получаем
Это сообщение отредактировал(а) Роман - 9.5.2009, 05:12 -------------------- Жизнь - это последствия от последствий. |
||||||||
|
|||||||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Я уже несколько раз показал в примерах, что поменять строки местами - не проблема. Проблема передвинуть одну строчку на другое место |
|||
|
||||
| Роман |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 279 Регистрация: 9.7.2006 Репутация: нет Всего: 1 |
Удалим id
Начальные данные
Перемещаем 3ю строчку в 7ю позицию
Получаем
Так? -------------------- Жизнь - это последствия от последствий. |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |