![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 записей и чтож их все нужно будет поднимать или опускать каждый раз??? Какие тут есть варианты? |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
ввести поле order, которое и будет определять нужный тебе порядок. при вставке новости, в поле записывать максимальный порядковый номер + 1. при изменении, то получится два запроса:
|
|||
|
||||
| bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: 4 Всего: 6 |
т.е. переопределять все остальные данные в поле order в любом случае придется?
А если у нас записей в таблице 1 000 000, что тогда, тоже начиная с4 и кончая 999 999 переопределять? |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Если покопаться в долговременной памяти и вспомнить самый первый бейсик, можно вспомнить, что там строчки нумеровались. Причем нумерация строк имела приземленный практический смысл. В операторе goto нужно было указывать номер строки. Так вот, чтобы не городить перенумерацию строк в программе по каждому дурацкому изменению, строки получали автоматические номера, кратные 10. Тоесть незадачливый программер имел возможность вставить еще 9 строк, без необходимости перенумеровывать все строки ;)
Дарю идею. Конечно, без процедуры причесывания порядковых номеров все равно не обойтись, однако ее можно временно отложить. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: 4 Всего: 6 |
Да эта мысль посетила меня одной из первых, но она тоже не идеальна.
При "ленивом" коде и не сложной выборки, мы сможем поменять одну новость местами 8-10 раз, но конечно при хорошой выборке(выбрать меньшее,выбрать большее после и перед нужным числом), то тогда имея в распоряжении пару доп цифр можно менять практически до бесконечности. Но все таки может есть другие варианты, поэтому и спрашиваю |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а почему не миллиард?
особенность реального мира состоит в том, что наши задачи исключительно практические. миллион новостей за пять лет, это 547 новостей в день. не знаю таких новостных порталов в нашей стране. тем более не могу представить, зачем им сортировать новости, да ещё и часто. да и не думаю, что ты создаёшь крупный проект. а по реальным задачам подбираются реальные решения. подобная система ордеровки хорошо вписывается, к примеру, в моей структуре страниц сайта. изменение позиции происходит настолько редко, что даже не стоит говорить. с другой стороны, никогда не слышал, чтобы изменяли порядок новостей. обычно он определяется всего двумя показателями: 1. дата создания 2. популярность поэтому, прежде чем размышлять о миллионах, я бы посоветовал обдумать задачу внимательнее. а если спрашиваешь, рассказывать именно реальные условия, а не сказки |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
bazzjr, может если задачу поставить как "поменять две записи местами", ничего страшного не произойдет?
А если по самой проблеме, то с учетом того, что сказал ksnk, можно записи вставлять с разницей в весе 4294, если максимальное количество записей будет 10^6. Думаю и число 10^6 вас удовлетворит с лихвой и 4293 смены позиций без перерасчета всей таблицы. Хотя задача действительно высосона из пальца. |
|||
|
||||
| bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: 4 Всего: 6 |
NewDima,
дык это совсем другая ситуация, мой вопрос с другом. bars80080, Ты прав в некотором роде, но ведь если тебе нужно попасть из Владивостока в Москву, ты же не пойдешь пешком в Москву, а скорей всего полетишь на самолёте. Сейчас я работаю над реализацией "относительными ссылками", о результатах дам знать. Если не покатит значит реализую как говорит уважаемый bars80080. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
||||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |