Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Если не Update, то что???

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Интернет
Предыдущая тема :: Следующая тема  
Автор Сообщение
Santo
Гость





СообщениеДобавлено: Ср Сен 04 2002 13:10    Заголовок сообщения: Если не Update, то что??? Ответить с цитатой

Народ вернемся к старому, есть гостевая книга, в ней сообщения идут по порядку 1,2,3,…
Эти сообщения выводятся на экран пользователя в таком же порядке, (использую MYSQL 4 поля: дата, имя, комментарий, и номер сообщения для этого поля устанавливаю auto_increment, primary key). Не нравиться комментарий номер 3 его надо удалить, загружаю страницу в которой только поле для ввода номера ненужного сообщения, поиск удаляемой записи осуществился по номеру сообщения. Нет поля номер 3 т.е. теперь сообщений на одно меньше и порядок следующий 1, 2, 4,…. Такой вопрос каким образом восстановить нормальный порядок сообщений т. е. 1,2,3,…?
P.S. Несколько дней назад я слышал от участников этого форума, что с update не надо связываться.
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Ср Сен 04 2002 15:03    Заголовок сообщения: Re: Если не Update, то что??? Ответить с цитатой

Вообще все нормальные люди делают так:
Ключи делают уникальными (автоинкрементными например), а всякую оформиловку (номер по порядку, сумма прописью, вычисления) делают динамически.

Тогда не будет никаких проблемм с содержимым базы и отображением данных.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Miky



Зарегистрирован: 19.04.2002
Сообщения: 94

СообщениеДобавлено: Ср Сен 04 2002 17:01    Заголовок сообщения: Re: Если не Update, то что??? Ответить с цитатой

Как учасники форума мотивировали свою рекомендацию? По-моему update прекрасно работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
yoshi
Гость





СообщениеДобавлено: Чт Сен 05 2002 09:06    Заголовок сообщения: Согласен с Miky Ответить с цитатой

Вполне прилично работает.
Вот кстати я встречал достаточно реализаций, где автоинкремент работает некорректно
Вернуться к началу
Santo
Гость





СообщениеДобавлено: Чт Сен 05 2002 10:02    Заголовок сообщения: Re: Согласен с Miky Ответить с цитатой

Народ я с вами тоже согласен, а синтаксис какой у update, напишите пожалуйста, не могу найти не одной нормальной документации по работе с таблицами!!!
Вернуться к началу
yoshi
Гость





СообщениеДобавлено: Чт Сен 05 2002 10:55    Заголовок сообщения: update Ответить с цитатой

UPDATE table
SET col=expression
[WHERE condition]

Ферштейн?
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Чт Сен 05 2002 15:50    Заголовок сообщения: Re: update Ответить с цитатой

Я чё-то не понял.
Update для всех записей что ли делать?
Мдя...
Либо гостевая книга действительно слишком скромная, либо я слишком много работаю с большими базами данных...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Miky



Зарегистрирован: 19.04.2002
Сообщения: 94

СообщениеДобавлено: Чт Сен 05 2002 18:27    Заголовок сообщения: Re: update Ответить с цитатой

Ну вообще-то я рассуждал так, когда делал гостевую книгу: Модерить я ее буду примерно раз в неделю, за неделю много ли напишут, а update-тать нужно только записи, которые появились после "неугодной" это не так много. В общем случае конечно это возможно не слишком элегантное решение, но для сайта с небольшой посещаемостью вполне приемлемое
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Пт Сен 06 2002 08:04    Заголовок сообщения: Re: update Ответить с цитатой

Ну тогда дерзай. Решение не слишком элегантное...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Miky



Зарегистрирован: 19.04.2002
Сообщения: 94

СообщениеДобавлено: Пт Сен 06 2002 11:04    Заголовок сообщения: Предложи дугое... критиковать легко... Ответить с цитатой

Только Гостевую нужно отображать и на каждой станице одинаковое количество комментариев, скажем 10. А внизу ссылки на дугие страници ну типа [1] [2] [3] ... и тд (и на каждой строго по 10 страниц!). Обычная Гостевая.
Мое решение позволяет получить содержимое каждой страници двумя запросами, один из которых довольно быстрый select count(*) from guestbook, а второй вытащит мне в результирующем наборе мои 10 записей не БОЛЬШЕ и не меньше.
Если у тебя есть решение обладающее этими достоинствами при выборке и не требующее "массовой" модификации записей при модерировании, я очень бы хотел посмотреть на него.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Борис
Гость





СообщениеДобавлено: Пт Сен 06 2002 18:56    Заголовок сообщения: Update не виноват Ответить с цитатой

Как я понял из переписки, нумерация требуется для того, чтобы можно было задать диапазон номеров с одинаковым количеством для вывода одной порции информации. То есть ты используешь count(*), чтобы посчитать количество порций, а затем по номерам выделяешь нужную порцию для вывода.
При таком подходе поле номера выполняет роль индекса и, естественно, просто обязано "update'иться" при изменении любого порядка. Вопрос в том, как обеспечить безошибочность при изменении (ключевых) данных. Сложность в том, что не зная алгоритма работа update, невозможно гарантировать, что эта операция не попытается создать недопустимые (дублирующиеся в твоем случае) ключи. Об этом и говорится в советах "не связываться с update". А обеспечить безошибочность очень просто: обновлять не целиком таблицу одной операцией update, а по одной записи, выбрав такое направление обхода записей, которое гарантирует создание недублирующихся ключей. Примерно таким образом (считаем, что максимальный_номер нам известен после select count(*)...) (запись в C-подобном псевдокоде):

Удаление записи #3 (с 4-ого по последний номера уменьшаются)
--------------------------------------------------------.. from таблица where номер=3;
тек_номер = 4;
while (тек_номер = 3) {
update таблица set номер=номер+1 where номер=тек_номер;
тек_номер--;
}
insert into таблица (номер) values (3);

По скорости работы этот варианта сопоставим со скоростью одной команды update по всем записям.

Все это, конечно, IMHO. Smile

PS. Этот подход требует лишних замен номеров, так как для вывода нужной страницы по сути требуются не номера *каждой* записи, а номера записей, которые будут *первыми* на соответствующей странице. Поэтому для ускорения работы выгодно создать отдельную таблицу "первых" номеров страниц (такой искусственный индекс) и описанное делать применительно к этой таблице.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Интернет Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...