Как сделать 1 запрос вне зависимости от количества переходов?

2 дня пытаюсь уже решить проблему, спрашивал часами чатгпт с примерами, но всё равно проблема остается
у меня есть такой код:

PHP:
  1. if ( $user_damage > $battle[‘health’] ) {
  2.     mysql_query(‘SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE’);
  3.     mysql_query(‘START TRANSACTION’);
  4.     try {
  5.         mysql_query(‘UPDATE `basement_clans` SET `json_key` = JSON_SET(`json_key`, \’$.»‘ . ‘key_’.($battle[‘boss_id’] + 1) . ‘»\’, JSON_EXTRACT(`json_key`, \’$.»‘ . ‘key_’.($battle[‘boss_id’] + 1) . ‘»\’) + 1), `json_limit` = JSON_SET(`json_limit`, \’$.»‘ . ‘boss_’.$battle[‘boss_id’] . ‘»\’, JSON_EXTRACT(`json_limit`, \’$.»‘ . ‘boss_’.$battle[‘boss_id’] . ‘»\’) + 1), `json_medals` = JSON_SET(`json_medals`, \’$.»‘ . ‘boss_’.$battle[‘boss_id’] . ‘»\’, JSON_EXTRACT(`json_medals`, \’$.»‘ . ‘boss_’.$battle[‘boss_id’] . ‘»\’) + 1) WHERE `clan` = ‘.$clan[‘id’].‘ AND `jail` = ‘.$user[‘reset’]);
  6.                      
  7.         mysql_query(‘DELETE FROM `_basement_battle` WHERE `id` = ‘.$battle[‘id’]);
  8.                          
  9.         mysql_query(‘COMMIT’);
  10.     } catch (Exception $e) {
  11.         mysql_query(‘ROLLBACK’);
  12.     }
  13. }

проблема: когда одновременно бьют несколько пользователей или более, то засчитывает столько сколько было одновременных ударов

нужно: чтобы был 1 запрос вне зависимости сколько было этих одновременных ударов

использовал: мемкеш, блокировку запросов, атомарные операции, циклы
ничего не помогает, уже не знаю что делать (

есть 3 таблицы:
basement_clans (id, clan, json_key, json_limit, json_medals, jail) — С откуда берутся ключи (с которыми и проблема) ($clanData)
_basement_battle (id, clan_id, boss_id, health, jail, time) — Само сражение ($battle)
_basement_member (id, user_id, user_health, fight_id, clan_id, boss_id, damage, jail) — Участники сражения (fight_id -> id) ($member)

 

вопрос конечно бредово описан…. тут человек то не поймет не то что чатгпт…
как я понимаю суть такая — есть некая таблица — туда нужно внести обновление… но только одно — видимо за какой то промежуток времени .. так?
тогда надо ввести доп поле — датавремя последнего запроса — в вашей терминологии «удара» ….
и при обновлении — дополнительно смотреть — сколько времени прошло с момента последнего запроса… например 1 в 5 минут …. — в where добавить — AND last_online > now() + interval 5 minute или что там нужно
суть должны понять

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *