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
Форумы портала PHP.SU :: Версия для печати :: Помогите разобраться с БД
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Помогите разобраться с БД

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

1. Седой - 02 Января, 2007 - 22:29:21 - перейти к сообщению
С Новым Годом!

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

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

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

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


Просто любопытно: а зачем?
3. f0rm4t - 03 Января, 2007 - 00:32:39 - перейти к сообщению
Чтобы выглядело солидно =)

Либо добавь новое поле-счетчик, либо убери автоинкреминг с 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).

ЗЫ: сор, ниче умнее в голову не пришло, у меня уже утро...
4. Седой - 05 Января, 2007 - 17:33:28 - перейти к сообщению
Огромное спасибо, суть понятна.
5. Седой - 13 Января, 2007 - 16:35:50 - перейти к сообщению
Не работает такой код.

Может не правильно объяснил...
Если есть 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/
6. f0rm4t - 13 Января, 2007 - 22:31:11 - перейти к сообщению
В цикле проверяй наличие записей с такими идентификаторами. Довольно ресурсоемкий способ (в плане времени)...
7. Stamm - 14 Января, 2007 - 17:09:24 - перейти к сообщению
Седой Очень плохая идея. А зачем вам это надо?? Лишнее мозгоё...во.
Пусть MySQL сам вставляет номер.
А если вдруг пользователь зашёл на вашу "доску" и поместил в закладки одно объявление с id=1.Потом вы удалили этот номер и записали новый объявление с id=1. Пользователь зайдёт и увидит совсем другое объявление. Что ни есть хорошо.
Да и существует вероятность перезаписи обявления. Представьте ситуации, два пользователся добавляют объявления. И одновременно добавляют это объявление. Скрипт у первого пользователя определяет номер 1, но перед добавлением записи в БД, запускается скрипт добавления второго пользователя. И у него тоже определяется номер 1. Объявление первого будет утеряно. Правда вероятность это очень мала, но всё же зачем делать за MySQL его работу??
8. valenok - 14 Января, 2007 - 17:44:19 - перейти к сообщению
Я поставил для поля id "auto_increment", что не совсем удобно.

А в чём выражается неудобство?
9. Седой - 17 Января, 2007 - 20:03:59 - перейти к сообщению
valenok пишет:
Я поставил для поля id "auto_increment", что не совсем удобно.

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


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

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

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

 

Powered by ExBB FM 1.0 RC1