TemKa_SD Posted September 3, 2018 Share Posted September 3, 2018 (edited) Здравствуйте. У меня есть игровой сервер, который в случае бана игрока записывает данные в базу данных таблицу stats_bans. Создан таск для разбана, который удаляет бан с выше упомянутой таблицы и переносит его в таблицу stats_banhistory. Есть конфликт, который нужно решить. Пи переносе всех банов со stats_bans сбрасывается автоинкримент (на сколько я понял) и уже новые баны идут в ID 1, возникает конфликт с таблицей stats_banhistory, так как там уже есть бан с ID 1. Как быть? Блин, закончилась квота на загрузку скринов, буду на внешний сервис грузить:http://prntscr.com/kpzflwhttp://prntscr.com/kpzfhnhttp://prntscr.com/kpzfr2 Пришла сейчас мысль, может при выполнении таска выбирать кол-во записей из banhistory и обновлять автоинкримент по нему у bans?archiveBans.php Edited September 3, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
newbie Posted September 3, 2018 Share Posted September 3, 2018 Автоинкремент не обнуляется при удалении записей. Значит, поле id без атрибута AUTO_INCREMENT. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 3, 2018 Author Share Posted September 3, 2018 http://prntscr.com/kpzyqx Link to comment Share on other sites More sharing options...
newbie Posted September 3, 2018 Share Posted September 3, 2018 А у второй таблицы? Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 3, 2018 Author Share Posted September 3, 2018 У второй я специально убрал, там был другой конфликт, в формировании банов. Т.е различался id из первой таблицы и второй. Т.е автоинкрименты одни были, а записи другие. Я хотел чтобы id во вторую переносился без автоинкримента. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 3, 2018 Author Share Posted September 3, 2018 Хотя нет, там тоже был дубликат ентри. Почему обнуляется id? Link to comment Share on other sites More sharing options...
newbie Posted September 3, 2018 Share Posted September 3, 2018 Вы для начала определитесь где ошибка. Если поле имеет атрибут AUTO_INCREMENT, то при вставки записи не нужно его указывать. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 3, 2018 Author Share Posted September 3, 2018 Я понимаю, у меня просто есть раздел амнистий, это обжалование бана, и там идет сравнение ID в banhistory и bans, id должны быть одинаковыми у бана, а они разные когда стоит автоинкримент. Хорошо, я сейчас верну автоинкримент в banhistory, потом покажу что будет. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 5, 2018 Author Share Posted September 5, 2018 Ну вот, как и говорил: https://prntscr.com/kqq4z2https://prntscr.com/kqq53hhttps://prntscr.com/kqq54rhttps://prntscr.com/kqq56bhttps://prntscr.com/kqq57k Link to comment Share on other sites More sharing options...
newbie Posted September 5, 2018 Share Posted September 5, 2018 Покажите код, где идет добавление записей в таблицу stats_bans Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 5, 2018 Author Share Posted September 5, 2018 Часть на игровом сервере C++, часть (через жалобы и ручное добавление) на сайте. http://prntscr.com/kqqmeb Link to comment Share on other sites More sharing options...
newbie Posted September 5, 2018 Share Posted September 5, 2018 Можно обернуть insert в try/catch, или установить в TRUE 3-ий параметр $db::i('stats')->insert('table', $data, TRUE);Я бы еще проверил счетчики автоинкремента у таблиц. Link to comment Share on other sites More sharing options...
TemKa_SD Posted September 5, 2018 Author Share Posted September 5, 2018 Блин, я не разберусь с try и catch, плохо понимаю что они делают. А третий параметр что включает? Link to comment Share on other sites More sharing options...
siv1987 Posted September 5, 2018 Share Posted September 5, 2018 У вас насколько я понял проблема не в том что он обнуляется, а в том что вы вставляете данные в таблицу с автоинкрементом указывая явный ид. Так всегда есть опасность дублирования ключей, в таком случае нужно тщательно составить логику работы скрипта. По хорошеиу тону поля которые имеют автоинкремент ид не задается. Имхо что-то тут с построением логикой. Обнуляет счетчик только запрос TRUNCATE. Link to comment Share on other sites More sharing options...
newbie Posted September 5, 2018 Share Posted September 5, 2018 Блин, я не разберусь с try и catchПрочитайте документацию :) Методом тыка далеко не уедешь. А третий параметр что включает? Если запись уже существует, то будет перезаписана. Лучше всего разобраться, почему возникает ошибка. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now