Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.