| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > поменять позицию |
| Автор: bazzjr 4.6.2010, 19:39 |
| Всем привет. Имею следующий вопрос: Есть к примеру таблица новостей в MYSQL id text 1 sometext 2 sometext 3 sometext ... 150 sometext на страницу выводятся новости по id, т.е. 1 это будет первая новость, 2 будет вторая и т.д. Как лучше организовать запросы так, чтобы я мог менять позиции новостей? Т.Е. например я хочу чтобы 143 новость переместилась на 4 позицию, а 4 значит должна стать 5-ой... Не устраивает подход с пере индексацией всей таблицы, т.е. будет например 10000 записей и чтож их все нужно будет поднимать или опускать каждый раз??? Какие тут есть варианты? |
| Автор: bars80080 4.6.2010, 19:48 | ||
ввести поле order, которое и будет определять нужный тебе порядок. при вставке новости, в поле записывать максимальный порядковый номер + 1. при изменении, то получится два запроса:
|
| Автор: bazzjr 4.6.2010, 19:58 |
| т.е. переопределять все остальные данные в поле order в любом случае придется? А если у нас записей в таблице 1 000 000, что тогда, тоже начиная с4 и кончая 999 999 переопределять? |
| Автор: ksnk 4.6.2010, 20:24 |
| Если покопаться в долговременной памяти и вспомнить самый первый бейсик, можно вспомнить, что там строчки нумеровались. Причем нумерация строк имела приземленный практический смысл. В операторе goto нужно было указывать номер строки. Так вот, чтобы не городить перенумерацию строк в программе по каждому дурацкому изменению, строки получали автоматические номера, кратные 10. Тоесть незадачливый программер имел возможность вставить еще 9 строк, без необходимости перенумеровывать все строки ;) Дарю идею. Конечно, без процедуры причесывания порядковых номеров все равно не обойтись, однако ее можно временно отложить. |
| Автор: bazzjr 4.6.2010, 20:31 |
| Да эта мысль посетила меня одной из первых, но она тоже не идеальна. При "ленивом" коде и не сложной выборки, мы сможем поменять одну новость местами 8-10 раз, но конечно при хорошой выборке(выбрать меньшее,выбрать большее после и перед нужным числом), то тогда имея в распоряжении пару доп цифр можно менять практически до бесконечности. Но все таки может есть другие варианты, поэтому и спрашиваю |
| Автор: bars80080 5.6.2010, 01:03 |
| а почему не миллиард? особенность реального мира состоит в том, что наши задачи исключительно практические. миллион новостей за пять лет, это 547 новостей в день. не знаю таких новостных порталов в нашей стране. тем более не могу представить, зачем им сортировать новости, да ещё и часто. да и не думаю, что ты создаёшь крупный проект. а по реальным задачам подбираются реальные решения. подобная система ордеровки хорошо вписывается, к примеру, в моей структуре страниц сайта. изменение позиции происходит настолько редко, что даже не стоит говорить. с другой стороны, никогда не слышал, чтобы изменяли порядок новостей. обычно он определяется всего двумя показателями: 1. дата создания 2. популярность поэтому, прежде чем размышлять о миллионах, я бы посоветовал обдумать задачу внимательнее. а если спрашиваешь, рассказывать именно реальные условия, а не сказки |
| Автор: NewDima 5.6.2010, 05:46 |
| bazzjr, может если задачу поставить как "поменять две записи местами", ничего страшного не произойдет? А если по самой проблеме, то с учетом того, что сказал ksnk, можно записи вставлять с разницей в весе 4294, если максимальное количество записей будет 10^6. Думаю и число 10^6 вас удовлетворит с лихвой и 4293 смены позиций без перерасчета всей таблицы. Хотя задача действительно высосона из пальца. |
| Автор: bazzjr 5.6.2010, 09:10 |
| NewDima, дык это совсем другая ситуация, мой вопрос с другом. bars80080, Ты прав в некотором роде, но ведь если тебе нужно попасть из Владивостока в Москву, ты же не пойдешь пешком в Москву, а скорей всего полетишь на самолёте. Сейчас я работаю над реализацией "относительными ссылками", о результатах дам знать. Если не покатит значит реализую как говорит уважаемый bars80080. |
| Автор: bars80080 5.6.2010, 12:34 |
ну, вот видишь. оказывается, это уже и не новости. а у этого дела может быть своя специфика (хотя тут я уже не подскажу) |