Перейти к контенту

Вопрос по PHP


Рекомендуемые сообщения

Вопрос не касается IPB напрямую.

 

 

Есть таблица (Mysql).

В ней три колонки - id, name, rich.

PHP-файлом при определенных действиях добавляется в таблицу строка с вышеперечисленными параметрами.

'name' и 'rich' обрабатываются из post-формы, с этим все ОК.

 

 

Проблема в выдаче 'id'.

Каждая новая создаваемая строка должна идти с id+1.

Т.е. первая строка, ей автоматом должно присваиваться значение 'id' = 1.

Следующей созданной строке - 2, следующей - 3, и т.д.

Вопрос - как это реализовать средствами php?

 

Спасибо заранее. :D

Ссылка на комментарий
Поделиться на других сайтах

Проблема в выдаче 'id'.

Каждая новая создаваемая строка должна идти с id+1.

Т.е. первая строка, ей автоматом должно присваиваться значение 'id' = 1.

Следующей созданной строке - 2, следующей - 3, и т.д.

Вопрос - как это реализовать средствами php?

 

Спасибо заранее. :D

Вообще это делается не средствами РНР

Для этого полю 'id' надо присвоить параметр "auto_increment" Тогда новому создаваемому полю присвоится id+1

 

Если есть желание - не вопрос. Извратись и вытащи запросом поле id (SELECT max(id) FROM ...) и прибавь к нему 1

А вообще с помощью РНР обычно присваивается системное время индексному полю

Но в абсолютном большинстве случаев все используют "auto_increment"

Ссылка на комментарий
Поделиться на других сайтах

А вообще с помощью РНР обычно присваивается системное время индексному полю

Это как?

Это в смысле забить на автоинкремент по id, а записывать в таблицу time=time() и сортировать по нему при выборке.

 

metrim80, так конечно можно делать, но это может плохо кончиться при большом количестве посетителей, с временем коллизии могут случиться намного более вероятно.

Ссылка на комментарий
Поделиться на других сайтах

Ооо, мусье знает толк в извращениях...

 

Пойду-ка я отсюда.

Ага, ты не представляешь сколько чуши пишут в книжках для начинающих, а народ на это ведётся :D

Ссылка на комментарий
Поделиться на других сайтах

А вообще с помощью РНР обычно присваивается системное время индексному полю

Это как?

Это в смысле забить на автоинкремент по id, а записывать в таблицу time=time() и сортировать по нему при выборке.

 

metrim80, так конечно можно делать, но это может плохо кончиться при большом количестве посетителей, с временем коллизии могут случиться намного более вероятно.

Угу.

Но всё же если желание присваивать ID именно с помощью PHP, то вариант с time() на порядок менее проблематиченчем вытаскивание запросом последнего id :D

Ну а в системах с малой интенсивностью пополнения данных, вариант с time() проблем не создаст

ну а time() я испоьлзовал еще когда ваял портальчики на текстовых файлах-таблицах.

Ссылка на комментарий
Поделиться на других сайтах

Мгм.

Ну, если на примере, как это реализовано, скажем, в IPB?

Допустим, при регистрации юзер получает Id, на единицу больше, чем id последнего юзера. Т.е. юзер, зарегившийся сразу после админа, получает id=2, следующий - 3, и т.д.

Так же с топик айди.

 

Вот что-то в этом роде меня и интересует.

 

Буду рыть тогда наверное в сторону auto_increment.

Ссылка на комментарий
Поделиться на других сайтах

Тоже тут все искал,что бы при удаление Id удаленного давался новому участнику

Но так и не чего не нашел.

Нашел вот эту темку

http://www.invisionmodding.com/index.php?s...delete+inactive

Удалил пользователей ненужных,но в таблице ibf_members_converge стоит "auto_increment" и там не меняеться не чего

Пишет к примеру пользователе 500,а следущий "auto_increment" 620 будит идти и не как нельзя изменить это.

Попробовал сделать этот запрос

SELECT id FROM ibf_members WHERE last_activity < (NOW()-5184000)

выдало всех пользователей Id и где пропуски дапустим идет 11 и сразус 15,то поменял их по очереди по порядку.

Все поменялись но и сообщения получились авторы другие

Поменял все иды сообщений,вроде все стало совпадать,но ibf_members_converge так и осталось следущий пользователь будит с 620 идом.

Чето там похимичил и изминил,что следущий будит идти с ид 501

Но получилась таблица ibf_members_converge пуста и все предыдущие пользователи 500 не могут зайти на форум

Хорошо хоть перед этим всем, бекап сделал :D

Пришлось востанавливать и работа пошла на смарку вся ;)

Ссылка на комментарий
Поделиться на других сайтах

Пришлось востанавливать и работа пошла на смарку вся :D

Можно при регистрации новых пользователей добавить проверку незанятых айдишников, и если есть такой, прописывать его принудительно.

 

Но делать этого не следует. При удалении пользователя могли остаться "хвосты", и при получении чужого номера новым пользователем, эти "хвосты" ему унаследуются.

Не проверял, удаляются ли ПМ-ки при удалении пользователя, или остаются висеть в базе... Сообщения вроде бы пересчитываются на гостевой "ноль"...

Ссылка на комментарий
Поделиться на других сайтах

Я сам заходил под ником удоляющиго и удолял ПМ все и его сообщения есле были.

Просто поставил мод Move Inactive Members и он выбрал всех по последниму посещению и перевел их в другую группу,а пока его настраевал им отправил раза три письма в ПМ автоматом этот мод.

Кто зашел,то тех перевело автоматом в пользователи опять,а кто не зашел,то сперва удалил их содержимое,а потом и самих.

Но у меня их не много было штук 10-15.

Забаялся ,что ПМ остануться в БД после удаления,вот и решил их сразу удалить

Можно будит попробовать при следущем удаление и посматреть остаеться или нет :D

 

FatCat

А вот посматрел,что ид идет не попарядку и теперь же получаеться там есть дыры или я ошибаюсь ?

Ссылка на комментарий
Поделиться на других сайтах

Есть дырки и что? :D

Боян, в поиске десяток тем про это.

Ссылка на комментарий
Поделиться на других сайтах

Я уже почти все просматрел эти темы :D

А сейчас мысль осенила,про эти дырки,это же наверное плохо или без разницы

Ссылка на комментарий
Поделиться на других сайтах

Для форума и MySQL это пофигу.
Ссылка на комментарий
Поделиться на других сайтах

Дырки в id'шниках это просто ужасно!!! Они заховают ваш моск и моск пользователей. Спасайтесь!

 

Удаляйте форумы! Сжигайте сервера! Через дырки в матрице поимеют вас во все дырки!

Ссылка на комментарий
Поделиться на других сайтах

Мне вот просто интересно с форумом покапаться и изучить его :D

Но есле бы он считал как положенно без дыр,то был бы счаслив вообще ;)

Ссылка на комментарий
Поделиться на других сайтах

>Мне вот просто интересно с форумом покапаться и изучить его

тут изучать надо не его, а MySQL + PHP

Ссылка на комментарий
Поделиться на других сайтах

Но есле бы он считал как положенно без дыр,то был бы счаслив вообще

вообще положено считать в двоичной системе... 01001101

Ссылка на комментарий
Поделиться на других сайтах

>Мне вот просто интересно с форумом покапаться и изучить его

тут изучать надо не его, а MySQL + PHP

Я его быстрей так пайму и научюсь методом тыка,чем по умному :D

Вот репу 4.6.2 методом тыка,а всетаки сделал и она работает,даже коды подставлял методом тыка,но как не странно работает все .

Это молодым нужно учить MySQL + PHP,а я все по старинки,ломиком ,да мантировкой :)

И так я многому научился,владея 5 месецев форумом,а раньше в клавишах путался на компе,а сейчас мод любой могу поставить себе.

Главное что бы он пашел,а то как репу ставил месяц ;)

 

Ладно, да простят меня модеры за флуд :)

 

А вот кто просто в староне смееться,то зря.Лудше бы какуюнибуть программу написали,типа Репы 4.6.2,а то у меня там с профилем не совсем гладко,а коды замучался подставлять уже :)

 

Но есле бы он считал как положенно без дыр,то был бы счаслив вообще

вообще положено считать в двоичной системе... 01001101

Есле бы я понимал о чем это вы.

Вот есле бы как перебрать на машине движок,то я бы вам расказал,а тут очень сложно все,даже незнаю,что такое синтаксы.

Когда мне пишет у вас ошибка в вашем синтаксе.

Есле бы сказали,сделай так и так,вот такой код и у вас будит считать,как положено,то я бы так и сделал

;)

Ссылка на комментарий
Поделиться на других сайтах

Это в смысле забить на автоинкремент по id, а записывать в таблицу time=time() и сортировать по нему при выборке.

Это не хороший подход т.к. секунда - это достаточно долгое время для запросов и одновременно два запроса могут создать строку в таблице с одинаковым временем, что приведёт к ошибке дублирования констрэйнта.

 

Угу.

Но всё же если желание присваивать ID именно с помощью PHP, то вариант с time() на порядок менее проблематиченчем вытаскивание запросом последнего id

запрос не нужен, чтобы узнать инкрементный id. Его возвращает метод get_insert_id() драйвера IPB вызванный сразу же после инсерта в таблицу с автоинкрементом.

 

А что касается дырок в id.. надоело уже об этом говорить. Фпоиск!

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.