Позиция строки в таблице (MySQL) @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
На страницу 1 2  >  Страница 1 из 2 [ Сообщений: 53 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Заголовок сообщения: Позиция строки в таблице (MySQL)
Сообщение Добавлено: 30 Июль 2003, 11:20:32 
Подскажите как можно менять позицию строки в таблице, пример
id title text
1 - One - Text1
2 - Second - Text2
3 - Third - Text3

нужно к примеру чтобы 3ая строка стала 2ой:
id title text
1 - One - Text1
3 - Third - Text3
2 - Second - Text2

???

_________________
:: metal kick ass ::
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 30 Июль 2003, 11:27:10 
завести еще одно поле - order

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 30 Июль 2003, 11:33:28 
c автоинкрементом и потом по нему сортировать при select'е?

_________________
:: metal kick ass ::
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 30 Июль 2003, 11:36:03 
но тогда

1 - One - Text1 - 1
2 - Second - Text2 - 2
3 - Third - Text3 - 3

как сменить у 2ой 2 на 3 и у 3ей строки 3 на 2???

_________________
:: metal kick ass ::
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 30 Июль 2003, 11:53:12 
либо 2 таблицы связанные сделать с индексами
либо реплейсом тупо менять

_________________
Пьяный русский хакер практически непобедим!
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 30 Июль 2003, 12:00:05 
CutCopyPaste, плиз, а можно примерчик с REPLACE ?

_________________
:: metal kick ass ::
Long Муж.
SubAdmin
Теоретик
17
Сообщения: 4362
Зарегистрирован: 25.04.01
Откуда: Москва
Сообщение Добавлено: 30 Июль 2003, 12:34:52 
MpaK999, зачем тебе еще один автоинкримент? тем более что больше одного тебе не дадут сделать. просто в этот поле пиши порядок сортировки. да, хочу на всякий случай заметить, что порядка расположения "строки" в таблице не существует. порядок определяется только в условии селекта.

_________________
Мудрость не всегда приходит с возрастом. Бывает, что возраст приходит один.
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 30 Июль 2003, 12:42:14 
MpaK999,
Код:

table
id   title        text
1 - One -      Text1
2 - Second - Text2
3 - Third -     Text3

mysql_query("update table set  text='Text3'  where title = 'Second' ");
mysql_query("update table set  text='Text2'  where title = 'Third' ");



_________________
Пьяный русский хакер практически непобедим!
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 30 Июль 2003, 16:54:07 
CutCopyPaste, ты чего советуешь? :eek: Лучше повниметельнее почитай что Long говорит. Заводишь поле куда будешь писать цифры. При выборке результат сортируешь по этому полю (order by).

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
vexoid
новый человек
0
Сообщения: 295
Зарегистрирован: 15.12.02
Откуда: msk
Сообщение Добавлено: 30 Июль 2003, 17:13:54 
хммм... чего он советует ? .)
он не советует, он просто показывает пример с переменой значений .)

_________________
lost world... lost life... lost tomorrow... only night
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 30 Июль 2003, 21:28:33 
vexoid, так я не про второй пост, я про первый. И то и другое затратно (что и показано примером) и не имеет особого смысла. Хотя работать будет, не спорю :)

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 31 Июль 2003, 09:12:10 
amphibian,

Цитата:
как сменить у 2ой 2 на 3 и у 3ей строки 3 на 2???



я и написал.…

если знаете как лучше, напишите код …

_________________
Пьяный русский хакер практически непобедим!
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 31 Июль 2003, 10:42:00 
CutCopyPaste, ты поменял значения записей, т.е. нарушил целостность данных. Если с этой таблицей через ID были связаны другие таблицы то концов не найти. А требуется совсем другое. Заводится поле order_field в которое записываются значения с некоторым шагом (например 10). Получается нечто вроде:
1 - One - Text1 - 10
2 - Second - Text2 - 20
3 - Third - Text3 - 30

Теперь если нужно поменять местами при выводе строки с ID 2 и 3, даем следующий запрос:
mysql_query("update table set order_field='35' where id = '2' ");

Целостность данных при этом не страдает.

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 31 Июль 2003, 11:00:57 
amphibian,
ясно, хорошее решение
видно я не так вопрос понял, я думал надо саму таблицу искалечить...

_________________
Пьяный русский хакер практически непобедим!
Acid~Jazz Муж.
соучастник
1
Сообщения: 740
Зарегистрирован: 12.04.03
Откуда: Зеленоград
Сообщение Добавлено: 31 Июль 2003, 11:41:08 
книжки бы что ли почитали, если так не додумались...

_________________
начинающий менеджер . http://acidjazz.photosight.ru/
CutCopyPaste Муж.
соучастник
0
Сообщения: 516
Зарегистрирован: 21.06.03
Откуда: Москва
Сообщение Добавлено: 31 Июль 2003, 11:46:35 
Acid~Jazz, понты оставь при себе :dont:
если такой умный, то зачем вообще сюда залез?

_________________
Пьяный русский хакер практически непобедим!
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 31 Июль 2003, 12:03:31 
Acid~Jazz, покажите мне те книжки, которые учат думать. Не надо народ стеснять. Если нечего сказать по теме, лучше не говорить.

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 31 Июль 2003, 12:50:43 
Дейта весьма рекомендую читать. Хотя бы для того, чтобы фраза "позицию строки в таблице" вызывала устойчивый рвотный рефлекс. :)

_________________
We've got the big memory and the small memory. The small memory's to remember the small things and the big memory's to forget the big ones.
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 31 Июль 2003, 17:20:03 
давайте без рвотных рефлексов...

_________________
...cut me, hurt me, rape my life...
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 31 Июль 2003, 18:11:17 
У нас теперь два МраК'а? :laugh:

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
MpaK
новый человек
0
Сообщения: 41
Зарегистрирован: 25.06.02
Откуда: Ufa
Сообщение Добавлено: 1 Август 2003, 08:48:29 
не, этот Я, тот же самый :insane:

_________________
...cut me, hurt me, rape my life...
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 1 Август 2003, 10:01:29 
MpaK, помолодел на 400 сообщений? Так держать, скоро в минус уйдешь! :dandy:

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 1 Август 2003, 10:34:28 
я вернулся... прибавиви в весе сообщений :laugh:

_________________
:: metal kick ass ::
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 5 Август 2003, 15:49:30 
возникла проблема, если удалить к примеру средную новость, а потом перемещать, то как соблюдать порядок чисел во втором поле?

_________________
:: metal kick ass ::
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 5 Август 2003, 16:03:44 
MpaK999, чего-то я не понял. Куда, зачем и как перемещать? Тебе чего нужно? У тебя порядок чисел никуда не девается если ты его сам не изменил.
Ты еще не понял что на логическом уровне не бывает такого понятия как позиция строки в таблице?

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 5 Август 2003, 17:40:38 
я при помощи специально добавленной колонки пытаюсь создать порядок следования новостей!
и чтобы им (порядком) можно было управлять!
вывод по ORDER BY order_num

то бишь встала проблема при удалении из середины, пример
1 - One
2 - Two
3 - Three
4 - Four

удаляем WHERE order_num=3
остается
1 - One
2 - Two
4 - Four

теперь к примеру нужно чтобы шла по порядку новость 1, 2, 4
можно сменить конечно 4 на 2 и все (UPDATE), но как узнать, что именно на 2 надо менять??? и следовательно, что 2 на 4???

_________________
:: metal kick ass ::
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 5 Август 2003, 17:54:04 
MpaK999,
Цитата:
теперь к примеру нужно чтобы шла по порядку новость 1, 2, 4


Ты имеешь ввиду именно то, что сказал? :confused: Смею тебя уверить что 4 больше 2 и при сортировке будет именно такой порядок. Или я чего-то не понимаю?

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 5 Август 2003, 17:57:18 
то бишь, когда пользователь поднимит 4ую, то надо сделать так

1 - One
4 - Two
2 - Four

_________________
:: metal kick ass ::
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 5 Август 2003, 18:09:29 
В отрыве от задачи не опримально получится, но работать будет: Запоминаешь коэффициент удаленного ID'шника, делаешь выборку ID'шников и коэффициентов из той же таблицы с той же сортировкой по коэффициентам, проходясь по результату выборки запоминаешь последний элемент меньше удаленного и останавливаешься на первом, который больше. Меняешь коэффициенты местами.

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
Skeeve
соучастник
0
Сообщения: 349
Зарегистрирован: 26.07.03
Откуда: Bazaar
Сообщение Добавлено: 5 Август 2003, 18:17:54 

MpaK999 писал(а):

остается
1 - One
2 - Two
4 - Four

то бишь, когда пользователь поднимит 4ую, то надо сделать так

1 - One
4 - Two
2 - Four



Как-то незаметно в позиции 2 появилось Four, а в позиции 4 — Two.
Само оно не перескакивает, а в объяснениях не появлялось.

Надо поменять местами 2 и 4? Или еще что-то?
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 5 Август 2003, 18:26:09 
Skeeve, просто имеет ввиду одно, а говорит другое. :killanasshole: Если я правильно понял, нужно вот так:
1 - One
2 - Four
4 - Two
Сортируем то по числовому полю. MpaK999, Следующий раз грамотно формулируйте вопрос - сами на него и ответить сможете.

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
vexoid
новый человек
0
Сообщения: 295
Зарегистрирован: 15.12.02
Откуда: msk
Сообщение Добавлено: 6 Август 2003, 11:39:34 
а при удалении помимо DELETE
не судьба делать UPDATE ?
update table set order_num = order_num - 1 where order_num > $del_order_num

_________________
lost world... lost life... lost tomorrow... only night
MpaK999 Муж.
участник
1
Сообщения: 1716
Зарегистрирован: 14.11.02
Откуда: Ufa/Russia
Сообщение Добавлено: 6 Август 2003, 11:45:22 
Skeeve, да, да именно незаметно, (как осуществить?)

1 - One
4 - Two
2 - Four

В данном случае у Two и Four сменился порядок и теперь при селекте через ORDER BY order_num получим результат One, Four, Two

Вопрос так и открыт, как узнать что 4 сменить на 2, а 2 на 4е?

_________________
:: metal kick ass ::
vexoid
новый человек
0
Сообщения: 295
Зарегистрирован: 15.12.02
Откуда: msk
Сообщение Добавлено: 6 Август 2003, 13:47:56 
Мрак ? ну накой оно надо ? ы ?
сделай так чтобы было 1, 2, 3 а не 1, 2 , 4 .) как - я чуть выше написал...

_________________
lost world... lost life... lost tomorrow... only night
amphibian Муж.
соучастник
0
Сообщения: 702
Зарегистрирован: 10.07.02
Откуда: St.Petersburg
Сообщение Добавлено: 6 Август 2003, 14:04:29 
vexoid, так это сколько же базе записей изменять придется при каждом удалении!!! :fie:

MpaK999, Т.е. по не зависящим от вас причинам изменились значения поля order_num? :lol: Каким образом это произошло, потрудитесь объяснить.

_________________
Любовь открывает кредит, который неизбежно ведет к разорению...
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
На страницу 1 2  >  Страница 1 из 2 [ Сообщений: 53 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100