Jump to content

Помогите с SQL запросом банами/разбанами


TemKa_SD
 Share

Recommended Posts

Здравствуйте. У меня есть игровой сервер, который в случае бана игрока записывает данные в базу данных таблицу stats_bans. Создан таск для разбана, который удаляет бан с выше упомянутой таблицы и переносит его в таблицу stats_banhistory.

 

Есть конфликт, который нужно решить. Пи переносе всех банов со stats_bans сбрасывается автоинкримент (на сколько я понял) и уже новые баны идут в ID 1, возникает конфликт с таблицей stats_banhistory, так как там уже есть бан с ID 1. Как быть?

 

Блин, закончилась квота на загрузку скринов, буду на внешний сервис грузить:

http://prntscr.com/kpzflw

http://prntscr.com/kpzfhn

http://prntscr.com/kpzfr2

 

Пришла сейчас мысль, может при выполнении таска выбирать кол-во записей из banhistory и обновлять автоинкримент по нему у bans?

archiveBans.php

Edited by TemKa_SD
Link to comment
Share on other sites

У второй я специально убрал, там был другой конфликт, в формировании банов. Т.е различался id из первой таблицы и второй. Т.е автоинкрименты одни были, а записи другие. Я хотел чтобы id во вторую переносился без автоинкримента.

Link to comment
Share on other sites

Вы для начала определитесь где ошибка.

 

Если поле имеет атрибут AUTO_INCREMENT, то при вставки записи не нужно его указывать.

Link to comment
Share on other sites

Я понимаю, у меня просто есть раздел амнистий, это обжалование бана, и там идет сравнение ID в banhistory и bans, id должны быть одинаковыми у бана, а они разные когда стоит автоинкримент. Хорошо, я сейчас верну автоинкримент в banhistory, потом покажу что будет.

Link to comment
Share on other sites

Можно обернуть insert в try/catch, или установить в TRUE 3-ий параметр

$db::i('stats')->insert('table', $data, TRUE);

Я бы еще проверил счетчики автоинкремента у таблиц.

Link to comment
Share on other sites

Блин, я не разберусь с try и catch, плохо понимаю что они делают. А третий параметр что включает?

Link to comment
Share on other sites

У вас насколько я понял проблема не в том что он обнуляется, а в том что вы вставляете данные в таблицу с автоинкрементом указывая явный ид. Так всегда есть опасность дублирования ключей, в таком случае нужно тщательно составить логику работы скрипта. По хорошеиу тону поля которые имеют автоинкремент ид не задается. Имхо что-то тут с построением логикой. Обнуляет счетчик только запрос TRUNCATE.

Link to comment
Share on other sites

Блин, я не разберусь с try и catch

Прочитайте документацию :)

Методом тыка далеко не уедешь.

 

А третий параметр что включает?

Если запись уже существует, то будет перезаписана.

 

Лучше всего разобраться, почему возникает ошибка.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...