Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобраться с БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Седой
Отправлено: 02 Января, 2007 - 22:29:21
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2007  
Откуда: Воронеж


Помог: 0 раз(а)




С Новым Годом!

Помогите разобраться с такой проблемой. Написал скрипт (я очень начинающий). Писал читая самоучитель...

Скрипт - доска объявлений, каждое объявление имеет свой id и отдельную страницу.
Проблема вот в чем. Я поставил для поля id "auto_increment", что не совсем удобно.

Может ли кто-то подсказать как сделать так, чтобы поле id (это первичный ключ) не увеличивалось каждый раз на единицу, а сначала проверяло с 1. Если есть 1- идем дальше, нету 2, значит присваиваем объявлению 2, а те, что больше - не трогаем. Будет все 100-200 заняты, значит увеличиваем на единицу. ???
 
 Top
evgenijj
Отправлено: 03 Января, 2007 - 00:14:05
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Седой пишет:

Может ли кто-то подсказать как сделать так, чтобы поле id (это первичный ключ) не увеличивалось каждый раз на единицу, а сначала проверяло с 1. Если есть 1- идем дальше, нету 2, значит присваиваем объявлению 2, а те, что больше - не трогаем. Будет все 100-200 заняты, значит увеличиваем на единицу. ???


Просто любопытно: а зачем?
 
 Top
f0rm4t
Отправлено: 03 Января, 2007 - 00:32:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 433
Дата рег-ции: Июнь 2006  


Помог: -1 раз(а)




Чтобы выглядело солидно =)

Либо добавь новое поле-счетчик, либо убери автоинкреминг с id.
Затем примерно так:
PHP:
скопировать код в буфер обмена
  1. $query = 'SELECT `id` FROM `table` ORDER BY `id` DESC LIMIT 1;';
  2. $result = mysql_query ($query);
  3. $fet = mysql_fetch_array ($result);
  4. $next_id = ++$fet[0];

$next_id - ID, который тебе надо вставить в следующий запрос (INSERT).

ЗЫ: сор, ниче умнее в голову не пришло, у меня уже утро...
 
 Top
Седой
Отправлено: 05 Января, 2007 - 17:33:28
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2007  
Откуда: Воронеж


Помог: 0 раз(а)




Огромное спасибо, суть понятна.
 
 Top
Седой
Отправлено: 13 Января, 2007 - 16:35:50
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2007  
Откуда: Воронеж


Помог: 0 раз(а)




Не работает такой код.

Может не правильно объяснил...
Если есть id=1, id=2 , id=5, id=8, id=10, id=11, id=12.

Как сделать так чтобы скрипт проверял порядок присвоенных id?

К примеру следующая запись должна иметь id=3, потом id=4, потом id=6...

А потом когда id=1 , будет удален, то скрипт определит это и запишет новую запись с ключем id=1/
 
 Top
f0rm4t
Отправлено: 13 Января, 2007 - 22:31:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 433
Дата рег-ции: Июнь 2006  


Помог: -1 раз(а)




В цикле проверяй наличие записей с такими идентификаторами. Довольно ресурсоемкий способ (в плане времени)...
 
 Top
Stamm
Отправлено: 14 Января, 2007 - 17:09:24
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Нояб. 2006  


Помог: 0 раз(а)




Седой Очень плохая идея. А зачем вам это надо?? Лишнее мозгоё...во.
Пусть MySQL сам вставляет номер.
А если вдруг пользователь зашёл на вашу "доску" и поместил в закладки одно объявление с id=1.Потом вы удалили этот номер и записали новый объявление с id=1. Пользователь зайдёт и увидит совсем другое объявление. Что ни есть хорошо.
Да и существует вероятность перезаписи обявления. Представьте ситуации, два пользователся добавляют объявления. И одновременно добавляют это объявление. Скрипт у первого пользователя определяет номер 1, но перед добавлением записи в БД, запускается скрипт добавления второго пользователя. И у него тоже определяется номер 1. Объявление первого будет утеряно. Правда вероятность это очень мала, но всё же зачем делать за MySQL его работу??


-----
Этот мир обречён на нас
©Маврин С.
 
 Top
valenok
Отправлено: 14 Января, 2007 - 17:44:19
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Я поставил для поля id "auto_increment", что не совсем удобно.

А в чём выражается неудобство?


-----
Truly yours, Sasha.
 
My status
 Top
Седой
Отправлено: 17 Января, 2007 - 20:03:59
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Янв. 2007  
Откуда: Воронеж


Помог: 0 раз(а)




valenok пишет:
Я поставил для поля id "auto_increment", что не совсем удобно.

А в чём выражается неудобство?


Неудобство выражается в том, что объявления через два месяца удаляются, а иногда и раньше.

Когда заходит пользователь, то ему все равно под каким id он видит объявление, а вот роботы будут постоянно натыкаться на ошибку 404.

Сейчас уже нет объявлений от 0 до 300, дальше будет еще хуже. А ведь эти триста были закешированы поисковиками и потом на их месте оказалась 404. \n\n(Добавление)
Stamm пишет:
Седой Очень плохая идея. А зачем вам это надо?? Лишнее мозгоё...во.
Это просто необходимо для того, чтобы доска была популярной.
Пусть MySQL сам вставляет номер.
Кроме auto_increment есть вариант?
А если вдруг пользователь зашёл на вашу "доску" и поместил в закладки одно объявление с id=1.Потом вы удалили этот номер и записали новый объявление с id=1. Пользователь зайдёт и увидит совсем другое объявление. Что ни есть хорошо.
Объявление и так будет удалено, они ведь не вечные. Если пользователь попадет на 404 будет еще хуже.
Да и существует вероятность перезаписи обявления. Представьте ситуации, два пользователся добавляют объявления. И одновременно добавляют это объявление. Скрипт у первого пользователя определяет номер 1, но перед добавлением записи в БД, запускается скрипт добавления второго пользователя. И у него тоже определяется номер 1. Объявление первого будет утеряно.
Это исключено. Такое возможно только при обновлении БД, но такой команды в скрипте нет.
Хотя ситуация щепетильная, спасибо.
Правда вероятность это очень мала, но всё же зачем делать за MySQL его работу??
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB