Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

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

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

Share this post


Link to post

Автоинкремент не обнуляется при удалении записей. Значит, поле id без атрибута AUTO_INCREMENT.

Share this post


Link to post

А у второй таблицы?

Share this post


Link to post

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

Share this post


Link to post

Хотя нет, там тоже был дубликат ентри. Почему обнуляется id?

Share this post


Link to post

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

 

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

Share this post


Link to post

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

Share this post


Link to post

Покажите код, где идет добавление записей в таблицу stats_bans

Share this post


Link to post

Часть на игровом сервере C++, часть (через жалобы и ручное добавление) на сайте.

 

http://prntscr.com/kqqmeb

Share this post


Link to post

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

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

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

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

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

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

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

 

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

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

 

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

Share this post


Link to post

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...