Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

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

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

09/03/18 09:44 (изменено)

Здравствуйте. У меня есть игровой сервер, который в случае бана игрока записывает данные в базу данных таблицу 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

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

http://prntscr.com/kqqmeb

Поделиться сообщением


Ссылка на сообщение

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...