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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменение порядка сортировки, алгоритм/механизм 
:(
    Опции темы
z-END
Дата 15.9.2005, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



есть таблица (MySQL+PHP) данные из которой выводятся по порядковому номеру (автоинкриментное поле - id) т.е. чем новее запись (по id) тем выше она отображается в списке.
и тут возникает необходимость запись под номером N поместить наверх, где она будет первой до добавления новой записи или "поднятия" другой записи из уже имеющихся... первая мысль которая мне пришла просто определять максимальное значение id в таблице и присваивать его нужной записи, но оказалось что id менять нельзя по условию, и вот я в прострации, что делать?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



А запись только одну надо "поднять" или их может быть много?
Добавлено @ 22:13
Если MySQL поддерживает Union, то можно так:
Код
select * from tabl where id = N
union
select * from tabl where id <> N order by id desc



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
z-END
Дата 15.9.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(LSD @ 15.9.2005, 23:12)
А запись только одну надо "поднять" или их может быть много?

нет, "поднимать" записи надо разные, вот например таблица:
Цитата
id | name
1  | mama
2  | papa
3  | sister
4  | brother

данные выводятся в обратном порядке т.е. на выходе получим:
brother,sister, papa,mama.
теперь нам надо "поднять" маму, т.е. чтобы на выходе получить:
mama,brother,sister, papa.
после этого например добавили grandmother (id=5) и она выводится первой т.е. :
grandmother,mama,brother,sister, papa.
а потом "подняли" брата и получили:
brother,grandmother,mama,sister, papa.
вот, надеюсь так понятней будет...
я думаю нужно вести дополнительное сортировочное поле, только вот как им пользоваться... х.з. smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
LSD
Дата 15.9.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Заведи еще одно поле, такого же типа что и id и при вставке записи прописывай туда то же значение что и в id. А дальше как ты сказал при необходимости "поднять" поле берем новый id из последовательности (заметь не максимум а из последовательности) и прописываем его туда.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
z-END
Дата 15.9.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(LSD @ 15.9.2005, 23:30)
такого же типа что и id и при вставке записи прописывай туда то же значение что и в id

я в id значения непрописываю, они задаются мускулом (autoinc) и я чесно говоря незнаю как определить в момент добавления значение id...
зы может Max(id)+1 просто делать и все?

Цитата(LSD @ 15.9.2005, 23:30)
поле берем новый id из последовательности (заметь не максимум а из последовательности) и прописываем его туда.

а это как? Max(id)+1 неподходит?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
LSD
Дата 15.9.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(z @ 15.9.2005, 23:37)
зы может Max(id)+1 просто делать и все?

Тогда надо при перед каждой вставкой выполнять select max(sort_id) + 1 from table, а это не есть гут, с точки зрения производительности.

А насчет последовательностей надо подождать специалистов по MySQL.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
igon
Дата 16.9.2005, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 21



При условии добавления рекомендованного LSD поля (которому тоже хорошо бы быть autoinc)
Код

1. select lsd_id 
       into do_up
       from myTable 
       where name='mama'
2. select max(lsd_id) 
       into max_lsd_id
       from myTable
3. update myTable
      set lsd_id = lsd_id-1
      where lsd_id>do_up
4. update myTable
      set lsd_id = max_lsd_id
      where name='mama'
Можно сократить и до двух Update
PS: В MySQL не специалист



--------------------
Хотите поговорить об этом?
PM   Вверх
Akina
Дата 16.9.2005, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 13
Всего: 454



Ключевое поле (автоинкрементный ID, unique) используется ТОЛЬКО для органеизации связей и поддержания целостности БД. Если нужна сортировка - заводи для этого еще одно поле.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bas
Дата 16.9.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

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



Еще одно поле , только так. Где номер будет соответствовать позиции, этот способ используется для построения TreeViews
Добавлено @ 09:37
Или новую таблицу, чтобы не изменять существующую.
PM MAIL   Вверх
igon
Дата 16.9.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 21



По некотором размышлении (во сне? smile):
В дополнительное поле заноси текущее системное время, вплоть до долей ms. У "поднимаемого" update этого поля тоже текущим системным временем. При выборке - обратная хронологическая сортировка


--------------------
Хотите поговорить об этом?
PM   Вверх
z-END
Дата 16.9.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(igon @ 16.9.2005, 17:34)
дополнительное поле заноси текущее системное время, вплоть до долей ms. У "поднимаемого" update этого поля тоже текущим системным временем. При выборке - обратная хронологическая сортировка

а если на серваке хостеры время взад-вперед (зима/лето) двигать будут?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
LSD
Дата 16.9.2005, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



А sequence в MySQL есть?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
z-END
Дата 17.9.2005, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(LSD @ 16.9.2005, 23:02)
А sequence в MySQL есть?

чесно говоря незнаюsmile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
igon
Дата 17.9.2005, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 3
Всего: 21



Цитата
а если на серваке хостеры время взад-вперед (зима/лето) двигать будут?
Да это вроде не проблема: ну, сдвинут в воскресенье в 3.00 ночи на час назад (если вперед - вообще не страшно) - через час, тем более к утру понедельника этот сдвиг уже "компенсируется".

С sequence, конечно, идеально было бы.


--------------------
Хотите поговорить об этом?
PM   Вверх
z-END
Дата 17.9.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(igon @ 17.9.2005, 15:36)
Да это вроде не проблема

ну впринципе даsmile так наверно и поступлюsmile
LSD, igon пасибо!




--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

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

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

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

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

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


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

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

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

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

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


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

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


 




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


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

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