Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поменять позицию, как лучше сделать 
:(
    Опции темы
bazzjr
Дата 4.6.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 6



Всем привет.

Имею следующий вопрос:

Есть к примеру таблица новостей  в MYSQL 

id                    text   
1                  sometext
2                  sometext
3                  sometext
...
150              sometext

на страницу выводятся новости по id, т.е.  1 это будет первая новость, 2 будет вторая и т.д.

Как лучше организовать запросы так, чтобы я мог менять позиции новостей?

Т.Е. например я хочу чтобы 143 новость переместилась на 4 позицию, а 4 значит должна стать 5-ой...
Не устраивает подход с пере индексацией всей таблицы, т.е. будет например 10000 записей и чтож их все нужно будет поднимать или опускать каждый раз???

Какие тут есть варианты?
PM MAIL ICQ   Вверх
bars80080
Дата 4.6.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



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

Код

UPDATE `table` SET `order`=20 WHERE `id`=140
и
UPDATE `table` SET `order`=`order`+1 WHERE `order`>19 AND `order`<140

PM MAIL WWW   Вверх
bazzjr
Дата 4.6.2010, 19:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 6



т.е. переопределять все остальные данные в поле order в любом случае придется?

А если  у нас записей в таблице 1 000 000, что тогда, тоже начиная с4 и кончая 999 999  переопределять?
PM MAIL ICQ   Вверх
ksnk
Дата 4.6.2010, 20:24 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


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

Репутация: 96
Всего: 386



Если покопаться в долговременной памяти и вспомнить самый первый бейсик, можно вспомнить, что там строчки нумеровались. Причем нумерация строк имела приземленный практический смысл. В операторе goto нужно было указывать номер строки. Так вот, чтобы не городить перенумерацию строк в программе по каждому дурацкому изменению, строки получали автоматические номера, кратные 10. Тоесть незадачливый программер имел возможность вставить еще 9 строк, без необходимости перенумеровывать все строки ;) 
Дарю идею.

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bazzjr
Дата 4.6.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 6



Да эта мысль посетила меня одной из первых, но она тоже не идеальна.

При "ленивом" коде и не сложной выборки, мы сможем поменять одну новость местами 8-10 раз, но конечно при хорошой выборке(выбрать меньшее,выбрать большее после и перед нужным числом), то тогда имея в распоряжении пару доп цифр можно менять практически до бесконечности. 
Но все таки может есть другие варианты, поэтому и спрашиваю smile
PM MAIL ICQ   Вверх
bars80080
Дата 5.6.2010, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а почему не миллиард?

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

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

а по реальным задачам подбираются реальные решения. подобная система ордеровки хорошо вписывается, к примеру, в моей структуре страниц сайта. изменение позиции происходит настолько редко, что даже не стоит говорить.
с другой стороны, никогда не слышал, чтобы изменяли порядок новостей. обычно он определяется всего двумя показателями:
1. дата создания
2. популярность
поэтому, прежде чем размышлять о миллионах, я бы посоветовал обдумать задачу внимательнее. а если спрашиваешь, рассказывать именно реальные условия, а не сказки
PM MAIL WWW   Вверх
NewDima
Дата 5.6.2010, 05:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



bazzjr, может если задачу поставить как "поменять две записи местами", ничего страшного не произойдет?
А если по самой проблеме, то с учетом того, что сказал ksnk, можно записи вставлять с разницей в весе 4294, если максимальное количество записей будет 10^6. Думаю и число 10^6 вас удовлетворит с лихвой и 4293 смены позиций без перерасчета всей таблицы. Хотя задача действительно высосона из пальца.
PM ICQ   Вверх
bazzjr
Дата 5.6.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 4
Всего: 6



NewDima, 
Цитата(NewDima @  5.6.2010,  05:46 Найти цитируемый пост)
может если задачу поставить как "поменять две записи местами"


дык это совсем другая ситуация, мой вопрос с другом.


bars80080, 
Ты прав в некотором роде, но ведь если тебе нужно попасть из Владивостока в Москву, ты же не пойдешь пешком в Москву, а скорей всего полетишь на самолёте.  smile 

Сейчас я работаю над реализацией "относительными ссылками", о результатах дам знать. Если не покатит значит реализую как говорит уважаемый bars80080.
PM MAIL ICQ   Вверх
bars80080
Дата 5.6.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(bazzjr @  5.6.2010,  09:10 Найти цитируемый пост)
Сейчас я работаю над реализацией "относительными ссылками"

ну, вот видишь. оказывается, это уже и не новости. а у этого дела может быть своя специфика (хотя тут я уже не подскажу)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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