根据php项目,进攻三区传球成功率?

wen PHP项目 2

本文目录导读:

根据php项目,进攻三区传球成功率?

  1. 概念定义
  2. 数据表设计
  3. SQL 统计
  4. PHP 实现示例(PDO)
  5. 注意事项

在PHP项目中统计“进攻三区传球成功率”,需要先明确几个概念,因为不同数据源和统计口径会有差异,下面给你一个可落地的实现思路和代码示例。

概念定义

进攻三区(Attacking Third):通常指球场纵向划分为三段后,靠近对方球门的那 1/3 区域,若以球场长度 105m 计,进攻三区大约是从对方半场距底线 35m 的区域(即 x > 70m,x 从本方底线起算)。

传球成功率 = 成功传球次数 / 总传球次数 × 100%

进攻三区传球:传球起点位于进攻三区的传球(有些口径按传球终点算,需与数据方确认)。

数据表设计

假设你有一张传球事件表 pass_events:

CREATE TABLE pass_events (
    id INT PRIMARY KEY AUTO_INCREMENT,
    match_id INT NOT NULL,
    player_id INT NOT NULL,
    team_id INT NOT NULL,
    start_x DECIMAL(6,2) NOT NULL,   -- 传球起点x坐标(0-105)
    start_y DECIMAL(6,2) NOT NULL,   -- 传球起点y坐标(0-68)
    end_x DECIMAL(6,2) NOT NULL,
    end_y DECIMAL(6,2) NOT NULL,
    is_success TINYINT(1) NOT NULL,  -- 1成功 0失败
    created_at DATETIME
);

SQL 统计

SELECT
    team_id,
    COUNT(*) AS total_passes,
    SUM(is_success) AS success_passes,
    ROUND(SUM(is_success) / COUNT(*) * 100, 2) AS success_rate
FROM pass_events
WHERE match_id = ?
  AND start_x > 70          -- 进攻三区:以105m场长、x从本方底线起算
GROUP BY team_id;

PHP 实现示例(PDO)

<?php
function getAttackingThirdPassStats(PDO $pdo, int $matchId, float $pitchLength = 105.0): array
{
    $thirdLine = $pitchLength * 2 / 3; // 70m
    $sql = "SELECT
                team_id,
                COUNT(*) AS total_passes,
                SUM(is_success) AS success_passes,
                ROUND(SUM(is_success) / COUNT(*) * 100, 2) AS success_rate
            FROM pass_events
            WHERE match_id = :match_id
              AND start_x > :third_line
            GROUP BY team_id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':match_id'   => $matchId,
        ':third_line' => $thirdLine,
    ]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 使用
$pdo = new PDO('mysql:host=localhost;dbname=football;charset=utf8mb4', 'user', 'pass');
$stats = getAttackingThirdPassStats($pdo, 1001);
foreach ($stats as $row) {
    printf("球队 %d:进攻三区传球 %d 次,成功 %d 次,成功率 %.2f%%\n",
        $row['team_id'], $row['total_passes'],
        $row['success_passes'], $row['success_rate']);
}

注意事项

  1. 坐标口径:确认数据源的 x 轴方向(从哪边底线起算)、场长是 105 还是 100/120,若坐标是归一化的 0–100,则阈值用 66.67。
  2. 传球起点 vs 终点:StatsBomb、Opta 等对“进攻三区传球”定义不同,常见是按起点,若业务需要按终点,把 start_x 改为 end_x。
  3. 排除定位球:角球、球门球、界外球是否计入,按业务需求加 pass_type 过滤。
  4. 样本量:单场样本小,建议同时提供多场聚合或按球员/球队维度统计。
  5. 性能:给 (match_id, start_x) 建联合索引。

如果你能说明数据源(Opta / StatsBomb / 自采)和坐标口径,我可以给出更精确的阈值和字段映射。

上一篇综合php项目,高速跑动距离对比?

下一篇当前分类已是最新一篇

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝