Пишу небольшую игру, возникла проблема с подбором игроков.
Задача: как только юзер вошёл на арену, искать ему противников в базе по заданным критериям и сортировать это всё в случайном порядке. В переменной $user
- данные игрока.;
warriors.fight_ready = 1
;warriors.level
) равен уровню игрока, или +- 1 уровень;warriors.energy
) больше 0; fights.time
) час не дрался с вошедшим игроком;Мои таблицы:
warriors (игроки)
CREATE TABLE IF NOT EXISTS `warriors` (
`id` INT(11) AUTO_INCREMENT COMMENT 'ID записи',
`user_id` bigint NOT NULL COMMENT 'ID юзера',
`level` INT(11) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'Уровень',
`energy` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Энергия',
`fight_ready` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '1 - готов к боям, 0 - нет',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата создания',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата обновления',
PRIMARY KEY (`id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
fights (все проведённые бои)
CREATE TABLE IF NOT EXISTS `fights` (
`id` INT(11) AUTO_INCREMENT COMMENT 'ID записи',
`attacker_id` INT(11) NOT NULL COMMENT 'ID нападавшего',
`defender_id` INT(11) NOT NULL COMMENT 'ID защищающего',
`winner_id` INT(11) NOT NULL COMMENT 'ID победителя',
`time` INT(11) NOT NULL COMMENT 'Дата в UNIX-формате',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата создания',
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата обновления',
PRIMARY KEY (`id`),
FOREIGN KEY (`attacker_id`) REFERENCES `warriors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`defender_id`) REFERENCES `warriors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`winner_id`) REFERENCES `warriors` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
То есть, как только юзер заходит на арену, нужно через SELECT получить рандомного противника по указанным выше критериям. Как можно это всё правильно реализовать одним запросом? ЯП - PHP.
Я набросал такой вот запрос, не знаю, правильно ли с точки зрения синтаксиса, и как туда подключить ещё тех, кто не дрался с юзером за последний час.
$enemiesStmt = $pdo->prepare("SELECT * FROM `warriors` WHERE `fight_ready` = :status AND `energy` > :energy AND (`level` = :level AND `level` = (`level` + 1) AND `level` = (`level` - 1)) ORDER BY RAND() LIMIT 1");
$enemiesStmt->execute([
'status' => 1,
'energy' => 1,
'level' => $user['level'],
]);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня возникла проблема с изменением стилей при использовании wp_add_inline_style Приведу пример, я хочу чтобы я мог выбирать шрифты для параграфа...
Могу ли я подключить и как ресурс webrtc/apprtc в PHP проектApprtc это гугла ресурс для webrtc