本文目录导读:

在PHP项目中显示“人盯人防守成功率”,通常有两种截然不同的含义:
- 体育类项目(如篮球、足球):球员或球队的防守数据统计。
- 业务/运维类项目(如电商、安全):指“客服/销售/系统”对特定目标(如大客户、漏洞)的专人跟进成功率。
根据你提到的“人盯人防守”,我推测极大概率是体育类项目(或者游戏数据分析)。
以下是针对这两种情况的实现方案和代码示例:
体育数据分析项目(最可能)
假设你有一个球员表 players 和防守记录表 defense_logs。
业务逻辑: 当防守球员在场上时,是否成功阻止对手得分(如投篮不进、失误、抢断等)。
数据库表结构示例
-- 防守统计表
CREATE TABLE defense_stats (
id INT PRIMARY KEY AUTO_INCREMENT,
player_id INT NOT NULL, -- 防守球员ID
game_id INT NOT NULL, -- 比赛ID
opponent_player_id INT, -- 防守对象(对手球员)
is_success TINYINT(1) DEFAULT 0, -- 核心字段:1=防守成功,0=防守失败
created_at TIMESTAMP
);
PHP 计算“人盯人防守成功率”代码
<?php
// 1. 连接数据库 (假设使用 PDO)
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 2. 获取当前用户筛选的球员ID (示例)
$playerId = intval($_GET['player_id'] ?? 1);
// 3. 查询该球员的总防守次数和成功次数
$sql = "SELECT
COUNT(*) as total_attempts,
SUM(CASE WHEN is_success = 1 THEN 1 ELSE 0 END) as successful_defenses
FROM defense_stats
WHERE player_id = :player_id AND game_id IS NOT NULL"; // 可按需条件过滤
$stmt = $pdo->prepare($sql);
$stmt->execute([':player_id' => $playerId]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// 4. 计算成功率并防止除零错误
$total = $row['total_attempts'] ?? 0;
$success = $row['successful_defenses'] ?? 0;
$rate = 0;
if ($total > 0) {
$rate = $success / $total * 100;
}
// 5. 输出显示 (前端页面)
?>
<!DOCTYPE html>
<html>
<head>人盯人防守成功率</title>
<style>
.rate-circle {
width: 100px;
height: 100px;
border-radius: 50%;
background: #3498db;
color: white;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
font-weight: bold;
margin: 20px auto;
}
</style>
</head>
<body>
<h1>球员 #<?php echo $playerId; ?> 防守效率报告</h1>
<div class="rate-circle">
<?php echo number_format($rate, 1); ?>%
</div>
<p>总防守回合: <strong><?php echo $total; ?></strong></p>
<p>成功防守回合: <strong><?php echo $success; ?></strong></p>
<p>防守成功率: <strong><?php echo number_format($rate, 2); ?>%</strong></p>
</body>
</html>
业务/系统安全项目(较少见但逻辑一致)
人盯人”指的是“运维人员对指定服务器的监控”或“销售对重点客户的跟进”:
核心逻辑不变, 只是把 defense_stats 换成 customer_followups,把 is_success 换成 is_closed / is_resolved。
// 业务场景:计算某销售负责的重点客户“盯单”成功率
$sql = "SELECT
COUNT(*) as total_leads,
SUM(CASE WHEN status = '转为成交' THEN 1 ELSE 0 END) as won_leads
FROM customer_followups
WHERE owner_id = :user_id";
进阶:如果追求实时性/缓存
如果数据量很大,建议在MySQL中直接计算(SQL聚合),避免一次性加载所有数据到PHP内存。
如何应用到你现有的PHP项目?
- 找出你现有的数据表:明确哪张表记录了你对抗的结果(成功/失败)。
- 替换字段名:将上述代码中的表名和字段名替换为你实际的表名。
- 传递参数:如果是在后台管理页面,建议用
$_GET['id']传递参数。
如果你能提供你的数据库表结构(有哪些字段),我可以根据你的具体表结构帮你写精确的SQL查询语句,而不是示例代码。