本文目录导读:

在PHP项目中统计“关门防守成功”次数,需要先明确业务场景,因为“关门防守”在不同系统(如足球数据、游戏、企业销售)中含义不同。
我为您提供三种最可能的场景及其PHP实现方案,请根据您的实际需求选择:
足球或竞技体育数据统计(最可能)
含义:指球队在比赛最后阶段(如85分钟后)保持领先且未丢球,成功守住胜果。
数据表设计(假设有比赛记录表 matches):
-- 比赛表
CREATE TABLE matches (
id INT PRIMARY KEY,
home_score INT,
away_score INT,
match_date DATE
);
-- 进球时间表
CREATE TABLE goals (
id INT PRIMARY KEY,
match_id INT,
team ENUM('home', 'away'),
goal_minute INT -- 进球分钟数
);
统计逻辑:
public function countSuccessfulDefense() {
// 1. 找出所有领先球队在85分钟后仍有进球优势的比赛
// 2. 且对方在85分钟后没有扳平或反超
$sql = "SELECT COUNT(DISTINCT m.id) as total
FROM matches m
LEFT JOIN goals g ON g.match_id = m.id AND g.goal_minute > 85
LEFT JOIN goals opp ON opp.match_id = m.id
AND opp.goal_minute > 85
AND opp.team != g.team
WHERE -- 在85分钟前领先
(m.home_score > m.away_score AND NOT EXISTS (
SELECT 1 FROM goals late
WHERE late.match_id = m.id AND late.goal_minute > 85
AND late.team = 'away' AND late.goal_minute <= 90
))
OR (m.away_score > m.home_score AND NOT EXISTS (...)
)";
$result = DB::select($sql);
return $result[0]->total;
}
企业销售/项目管理(CRM系统)
含义:销售在临近结单日期(关门时间)成功促单,防止客户流失。
class DealDefenseAnalyzer {
private $dealThresholdHours = 24; // 预设:最后24小时内完成算“紧迫防守”
public function countDefenseSuccess() {
// 统计在最后关单期限前24小时内完成签约的订单
return Order::where('status', 'won')
->where('closed_at', '<=', DB::raw('updated_at'))
->where('deal_duration_hours', '<=', $this->dealThresholdHours)
->count();
}
}
游戏/网络安全系统
含义:在基地/大门即将被攻破前成功防守。
public function countSuccessfulBaseDefense() {
// 统计事件表
$events = DefenseEvent::where('event_type', 'attack')
->where('outcome', 'defended')
->where('defense_time', '>=', '00:00:00')
->where('defense_time', '<=', '00:05:00'); // 最后时间窗口
return $events->count();
}
💡 专业建议
如果我的理解有误,请补充以下信息:
- 系统类型:是体育赛事、ERP、还是游戏?
- “关门防守”准确定义:具体指什么时间节点?什么进球/事件?
- 技术栈细节:用的是什么框架(Laravel/ThinkPHP/原生)?
这样我可以给出更精准的SQL或Laravel查询代码,现在的方案是基于常见场景的通用实现,如果您能提供数据库表结构示例或业务逻辑描述,可确保答案完全符合您需求。