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

Вопрос по 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.. надоело уже об этом говорить. Фпоиск!

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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