本文目录导读:

我来帮你创建一个统计脚后跟传球成功的PHP解决方案,这个功能通常用于足球比赛数据统计系统。
基础数据库设计
-- 传球记录表
CREATE TABLE pass_records (
id INT AUTO_INCREMENT PRIMARY KEY,
match_id INT NOT NULL,
player_id INT NOT NULL,
pass_type ENUM('heel', 'normal', 'header', 'long', 'short') NOT NULL,
pass_success TINYINT(1) NOT NULL DEFAULT 0,
pass_direction VARCHAR(50),
pass_distance INT,
pass_time TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_match_player (match_id, player_id),
INDEX idx_pass_type (pass_type)
);
-- 球员表
CREATE TABLE players (
id INT PRIMARY KEY,
name VARCHAR(100),
team_id INT,
position VARCHAR(50)
);
-- 比赛表
CREATE TABLE matches (
id INT PRIMARY KEY,
match_date DATE,
home_team_id INT,
away_team_id INT,
competition_id INT
);
PHP统计类实现
<?php
class HeelPassStats {
private $db;
public function __construct($dbConnection) {
$this->db = $dbConnection;
}
/**
* 统计单个球员脚后跟传球成功次数
*/
public function getPlayerHeelPassStats($playerId, $matchId = null) {
$sql = "SELECT
COUNT(*) as total_heel_passes,
SUM(pass_success) as successful_heel_passes,
SUM(CASE WHEN pass_success = 1 THEN 1 ELSE 0 END) as success_count,
ROUND(SUM(pass_success) * 100.0 / COUNT(*), 2) as success_rate
FROM pass_records
WHERE player_id = ? AND pass_type = 'heel'";
$params = [$playerId];
if ($matchId) {
$sql .= " AND match_id = ?";
$params[] = $matchId;
}
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
/**
* 统计球队脚后跟传球成功次数
*/
public function getTeamHeelPassStats($teamId, $startDate = null, $endDate = null) {
$sql = "SELECT
t.name as team_name,
COUNT(pr.id) as total_heel_passes,
SUM(pr.pass_success) as successful_heel_passes,
AVG(pr.pass_success) * 100 as success_rate,
AVG(pr.pass_distance) as avg_distance
FROM pass_records pr
JOIN players p ON pr.player_id = p.id
JOIN matches m ON pr.match_id = m.id
JOIN teams t ON p.team_id = t.id
WHERE pr.pass_type = 'heel' AND p.team_id = ?";
$params = [$teamId];
if ($startDate && $endDate) {
$sql .= " AND m.match_date BETWEEN ? AND ?";
$params[] = $startDate;
$params[] = $endDate;
}
$sql .= " GROUP BY t.id, t.name";
$stmt = $this->db->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 获取比赛中的脚后跟传球统计
*/
public function getMatchHeelPassStats($matchId) {
$sql = "SELECT
p.id as player_id,
p.name as player_name,
p.position,
COUNT(pr.id) as total_heel_passes,
SUM(pr.pass_success) as successful_heel_passes,
pr.pass_direction,
pr.pass_distance
FROM pass_records pr
JOIN players p ON pr.player_id = p.id
WHERE pr.match_id = ? AND pr.pass_type = 'heel'
GROUP BY p.id, p.name, p.position, pr.pass_direction, pr.pass_distance
ORDER BY successful_heel_passes DESC";
$stmt = $this->db->prepare($sql);
$stmt->execute([$matchId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 统计所有球队脚后跟传球排行榜
*/
public function getHeelPassRanking($limit = 10) {
$sql = "SELECT
p.id as player_id,
p.name as player_name,
p.position,
t.name as team_name,
COUNT(pr.id) as total_heel_passes,
SUM(pr.pass_success) as successful_heel_passes,
ROUND(SUM(pr.pass_success) * 100.0 / COUNT(pr.id), 2) as success_rate
FROM pass_records pr
JOIN players p ON pr.player_id = p.id
JOIN teams t ON p.team_id = t.id
WHERE pr.pass_type = 'heel'
GROUP BY p.id, p.name, p.position, t.name
HAVING COUNT(pr.id) >= 1
ORDER BY successful_heel_passes DESC, success_rate DESC
LIMIT ?";
$stmt = $this->db->prepare($sql);
$stmt->execute([$limit]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
/**
* 记录新的脚后跟传球
*/
public function recordHeelPass($matchId, $playerId, $passData) {
$sql = "INSERT INTO pass_records
(match_id, player_id, pass_type, pass_success, pass_direction, pass_distance)
VALUES (?, ?, 'heel', ?, ?, ?)";
$stmt = $this->db->prepare($sql);
return $stmt->execute([
$matchId,
$playerId,
$passData['success'] ?? 0,
$passData['direction'] ?? null,
$passData['distance'] ?? 0
]);
}
/**
* 获取比赛实时脚后跟传球统计
*/
public function getLiveHeelPassStats($matchId) {
return [
'home_team' => $this->getTeamLiveStats($matchId, 'home'),
'away_team' => $this->getTeamLiveStats($matchId, 'away')
];
}
private function getTeamLiveStats($matchId, $teamSide) {
$teamId = $teamSide === 'home' ? 'home_team_id' : 'away_team_id';
$sql = "SELECT
COUNT(CASE WHEN pr.pass_success = 1 THEN 1 END) as successful_passes,
COUNT(pr.id) as total_passes,
ROUND(COUNT(CASE WHEN pr.pass_success = 1 THEN 1 END) * 100.0 / COUNT(pr.id), 2) as success_rate,
MIN(pr.pass_distance) as min_distance,
MAX(pr.pass_distance) as max_distance,
AVG(pr.pass_distance) as avg_distance
FROM pass_records pr
JOIN players p ON pr.player_id = p.id
JOIN matches m ON pr.match_id = m.id
WHERE pr.match_id = ?
AND pr.pass_type = 'heel'
AND p.team_id = (SELECT $teamId FROM matches WHERE id = ?)";
$stmt = $this->db->prepare($sql);
$stmt->execute([$matchId, $matchId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
/**
* 导出脚后跟传球详细数据
*/
public function exportHeelPassDetails($matchId) {
$sql = "SELECT
m.match_date,
p.name as player_name,
t.name as team_name,
pr.pass_direction,
pr.pass_distance,
pr.pass_success,
pr.created_at as pass_time
FROM pass_records pr
JOIN players p ON pr.player_id = p.id
JOIN teams t ON p.team_id = t.id
JOIN matches m ON pr.match_id = m.id
WHERE pr.match_id = ? AND pr.pass_type = 'heel'
ORDER BY pr.created_at DESC";
$stmt = $this->db->prepare($sql);
$stmt->execute([$matchId]);
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
使用示例
<?php
// 初始化数据库连接
$pdo = new PDO('mysql:host=localhost;dbname=football_stats', 'username', 'password');
$heelPassStats = new HeelPassStats($pdo);
// 1. 统计某球员脚后跟传球成功次数
$playerStats = $heelPassStats->getPlayerHeelPassStats(101); // player_id = 101
echo "脚后跟传球总数: " . $playerStats['total_heel_passes'];
echo "成功次数: " . $playerStats['successful_heel_passes'];
echo "成功率: " . $playerStats['success_rate'] . "%";
// 2. 统计球队本赛季脚后跟传球
$teamStats = $heelPassStats->getTeamHeelPassStats(
1, // team_id
'2024-01-01',
'2024-12-31'
);
// 3. 获取比赛实时统计
$matchId = 12345; // 示例比赛ID
$liveStats = $heelPassStats->getLiveHeelPassStats($matchId);
// 4. 脚后跟传球排行榜
$ranking = $heelPassStats->getHeelPassRanking(10);
// 5. 记录新的脚后跟传球数据
$heelPassStats->recordHeelPass(12345, 101, [
'success' => 1,
'direction' => 'forward',
'distance' => 15 // 15米
]);
前端展示示例
<!DOCTYPE html>
<html>
<head>脚后跟传球统计</title>
<style>
.stats-container {
padding: 20px;
font-family: Arial, sans-serif;
}
.stat-card {
background: #f5f5f5;
border-radius: 8px;
padding: 15px;
margin: 10px;
display: inline-block;
}
.stat-value {
font-size: 24px;
font-weight: bold;
color: #333;
}
.success-rate {
color: #4CAF50;
font-weight: bold;
}
</style>
</head>
<body>
<div class="stats-container">
<h2>脚后跟传球成功次数统计</h2>
<?php
// 显示球员统计数据
$playerId = $_GET['player_id'] ?? 101;
$stats = $heelPassStats->getPlayerHeelPassStats($playerId);
?>
<div class="stat-card">
<h3>球员脚后跟传球统计</h3>
<div class="stat-value">成功 <?= $stats['successful_heel_passes'] ?> 次</div>
<div>总传球 <?= $stats['total_heel_passes'] ?> 次</div>
<div class="success-rate">成功率: <?= $stats['success_rate'] ?>%</div>
</div>
<!-- 更多统计数据展示 -->
</div>
</body>
</html>
这个解决方案提供了完整的PHP统计分析功能,包括:
- 基础统计:单球员、单场次的脚后跟传球次数统计
- 团队统计:球队级别的统计与排名
- 实时统计:比赛进行中的实时数据
- 数据导出:详细的传球数据导出
- 灵活查询:支持按时间、球员、球队等条件筛选
你可以根据具体需求调整统计维度,比如增加传球距离分层、比赛场景等更细致的统计指标。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播