Русское сообщество по скриптингу

Обновление множества записей в БД

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Обновление множества записей в БД

Сообщение RevCrew » 19 фев 2020, 21:30

Собственно, есть таблица
id player weapon_id team weapon_skin

id - айди строки
player - айди игрока из другой таблицы
weapon_id - 0..31 айди оружия в кс
team - 0|1
weapon_skin - переменная типа Int

Всего оружией в кс 31, соответственно для каждого игрока должна быть 31 запись (чтобы хранить скин для каждого оружия). Учитывая что team может быть 0|1 то 62 будет.
Все это нужно как то сохранять при выходе игрока, 31 запрос делать не хочется. Как лучше реализовать?
Думается, что надо хранить в переменной все id для игрока, чтобы в будущем делать insert\update по Id.
Варианты:
1. При выходе игрока первый раз делать INSERT INTO table (player, weapon_id, team, weapon_skin) VALUES (1,1,1, 1), (1,2, 1, 2), ... и тд ( Кол-во комбинаций 31 * 2 (т.к team = 1 | 2). В будущем делается UPDATE.
2. Все делать через INSERT ON DUBLICATE KEY UPDATE.
3. Как то иначе
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Обновление множества записей в БД

Сообщение xbass13 » 20 фев 2020, 01:48

Есть дефолтный скин для связки weapon_id-team? Его смысла хранить нет, все изменения в базе по факту, а не по дисконекту. Сменился скин для этой связки - мы знаем какой был скин(был дефолт, делаем insert. Был не дефолт - delete player-team-weapon_id если стал дефолт, update player-team-weapon_id если другой не дефолт)
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: Обновление множества записей в БД

Сообщение RevCrew » 20 фев 2020, 12:19

xbass13, Да, тоже так подумал, что нужно по факту менять скин. Есть ли смысл делать delete ? Если Weapon_Skin 0 то это скина нет.
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Обновление множества записей в БД

Сообщение xbass13 » 20 фев 2020, 13:19

:dntknw: я бы чистил, но это решать вам
Тогда второй вариант, вами предложенный - INSERT ON DUBLICATE KEY UPDATE (по факту изменения скина)
Аватара пользователя
xbass13
 
Сообщения: 96
Зарегистрирован: 13 июн 2012, 21:20
Благодарил (а): 36 раз.
Поблагодарили: 35 раз.
Опыт программирования: Больше трех лет
Языки программирования: pawn, c++, js, php

Re: Обновление множества записей в БД

Сообщение Leonidddd » 22 фев 2020, 02:51

RevCrew, это все можно сделать в 3 запроса при входе и выходе игрока. К примеру:

Создается основная таблица, где будут храниться следущие значения: id, nickname, steamid, ip
причем, id с AUTO_INCREMENT атрибутом, потом ещё 2 таблицы, к примеру, по командам с точно таким же id AUTO_INCREMENT.

Грубо говоря: первая таблица будет содержать список всех оружий первой команды, а вторая - второй,
связующее звено между тремя таблицами - это только один единственный индекс id, который будет определять, кому именно будет принадлежать та или иная информация.

Выйдет чет такое, страшное, но эт нормально(хотя бы не лагает при таких запросах, хех):
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Leonidddd
Модератор
 
Сообщения: 2557
Зарегистрирован: 08 апр 2012, 18:13
Откуда: г. Запорожье
Благодарил (а): 192 раз.
Поблагодарили: 718 раз.

Re: Обновление множества записей в БД

Сообщение fl0wer » 22 фев 2020, 04:31

Leonidddd писал(а):RevCrew, это все можно сделать в 3 запроса при входе и выходе игрока. К примеру:

Создается основная таблица, где будут храниться следущие значения: id, nickname, steamid, ip
причем, id с AUTO_INCREMENT атрибутом, потом ещё 2 таблицы, к примеру, по командам с точно таким же id AUTO_INCREMENT.

Грубо говоря: первая таблица будет содержать список всех оружий первой команды, а вторая - второй,
связующее звено между тремя таблицами - это только один единственный индекс id, который будет определять, кому именно будет принадлежать та или иная информация.

Выйдет чет такое, страшное, но эт нормально(хотя бы не лагает при таких запросах, хех):

Страшно, вырубай.
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

Re: Обновление множества записей в БД

Сообщение RevCrew » 22 фев 2020, 13:38

Leonidddd, вариант хороший, но мне не подойдет. В будущем планирую добавить для оружия Stattrack(кол-во убийств с каждого оружия) и другие свойства.
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Обновление множества записей в БД

Сообщение Fedcomp » 24 фев 2020, 15:57

По записи на свойство это надежно.
Маленькая помарка, не
INSERT ON DUBLICATE KEY UPDATE

а
INSERT ON DUPLICATE KEY UPDATE

Вы должны зарегистрироваться, чтобы видеть ссылки. ... ey-update/

Ну еще в mysql есть json datatype: Вы должны зарегистрироваться, чтобы видеть ссылки.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 815 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Обновление множества записей в БД

Сообщение hren_morjovui » 25 фев 2020, 12:28

json или serialize
"В этом мире неизбежны три вещи: смерть, налоги и гравитация."
Аватара пользователя
hren_morjovui
 
Сообщения: 258
Зарегистрирован: 29 май 2018, 09:15
Благодарил (а): 88 раз.
Поблагодарили: 22 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
PHP
jQuery


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4