2 дня пытаюсь уже решить проблему, спрашивал часами чатгпт с примерами, но всё равно проблема остается у меня есть такой код: PHP: if ( $user_damage > $battle['health'] ) { mysql_query('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE'); mysql_query('START TRANSACTION'); try { 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']); mysql_query('DELETE FROM `_basement_battle` WHERE `id` = '.$battle['id']); mysql_query('COMMIT'); } catch (Exception $e) { mysql_query('ROLLBACK'); } } проблема: когда одновременно бьют несколько пользователей или более, то засчитывает столько сколько было одновременных ударов нужно: чтобы был 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 или что там нужно суть должны понять