php项目统计假动作晃过防守几次?

wen PHP项目 1

PHP项目统计"假动作晃过防守"次数方案

你这个问题有点模糊——"假动作晃过防守"听起来像体育类项目(篮球/足球)的需求,但也可能是个比喻,我先按最可能的两种场景给你方案,你可以确认一下。

php项目统计假动作晃过防守几次?

体育赛事/训练数据统计系统

如果是篮球/足球类项目,需要统计球员"假动作晃过防守"的次数:

数据库设计

-- 球员表
CREATE TABLE players (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    team_id INT
);
-- 比赛表
CREATE TABLE matches (
    id INT PRIMARY KEY AUTO_INCREMENT,
    match_date DATE,
    home_team_id INT,
    away_team_id INT
);
-- 动作记录表(核心)
CREATE TABLE action_records (
    id INT PRIMARY KEY AUTO_INCREMENT,
    match_id INT NOT NULL,
    player_id INT NOT NULL,
    action_type ENUM('fake_dribble','crossover','spin_move','step_back','fake_shot') NOT NULL,
    is_successful TINYINT(1) DEFAULT 0 COMMENT '是否晃过防守',
    defender_id INT COMMENT '被晃过的防守球员',
    minute INT COMMENT '发生时间(分钟)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_player_action (player_id, action_type),
    INDEX idx_match (match_id)
);

统计查询

-- 单个球员晃过防守总次数
SELECT 
    p.name,
    COUNT(*) AS total_fake_moves,
    SUM(a.is_successful) AS successful_beats,
    ROUND(SUM(a.is_successful) / COUNT(*) * 100, 2) AS success_rate
FROM action_records a
JOIN players p ON a.player_id = p.id
WHERE a.action_type IN ('fake_dribble','crossover','spin_move','step_back','fake_shot')
GROUP BY a.player_id
ORDER BY successful_beats DESC;
-- 某场比赛某球员的详细统计
SELECT 
    action_type,
    COUNT(*) AS attempts,
    SUM(is_successful) AS success_count
FROM action_records
WHERE match_id = ? AND player_id = ?
GROUP BY action_type;

PHP 实现(PDO)

<?php
class FakeMoveStats {
    private PDO $pdo;
    public function __construct(PDO $pdo) {
        $this->pdo = $pdo;
    }
    /** 记录一次假动作 */
    public function record(int $matchId, int $playerId, string $type, bool $success, ?int $defenderId = null): void {
        $stmt = $this->pdo->prepare(
            "INSERT INTO action_records (match_id, player_id, action_type, is_successful, defender_id)
             VALUES (?, ?, ?, ?, ?)"
        );
        $stmt->execute([$matchId, $playerId, $type, (int)$success, $defenderId]);
    }
    /** 统计球员晃过防守次数 */
    public function getBeatCount(int $playerId): array {
        $stmt = $this->pdo->prepare(
            "SELECT 
                COUNT(*) AS attempts,
                SUM(is_successful) AS beats,
                ROUND(SUM(is_successful)/COUNT(*)*100, 2) AS rate
             FROM action_records
             WHERE player_id = ? AND is_successful = 1"
        );
        $stmt->execute([$playerId]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    /** 排行榜 */
    public function leaderboard(int $limit = 10): array {
        $stmt = $this->pdo->prepare(
            "SELECT p.name, SUM(a.is_successful) AS beats
             FROM action_records a JOIN players p ON a.player_id = p.id
             GROUP BY a.player_id ORDER BY beats DESC LIMIT ?"
        );
        $stmt->bindValue(1, $limit, PDO::PARAM_INT);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

如果是"假动作"作为比喻(比如营销、游戏、测试中的"障眼法")

那我需要你补充:

  1. 这个"假动作"具体指什么业务动作?
  2. "防守"指什么?对手?风控?测试用例?
  3. "晃过"的判定标准是什么?

请确认

为了给你更精准的代码,请告诉我:

  • [ ] 是体育类项目吗?具体篮球还是足球?
  • [ ] 数据来源是人工录入、视频AI识别、还是传感器?
  • [ ] 需要实时统计还是赛后报表?
  • [ ] 有没有多维度需求(按比赛/赛季/对手/位置)?

告诉我这几点,我可以直接给你可运行的完整 PHP 模块。

抱歉,评论功能暂时关闭!