global $wpdb;
$ranking_table = $wpdb->prefix . 'player_rankings';
$players_table = $wpdb->prefix . 'players';
$match_players_table = $wpdb->prefix . 'match_players';
$matches_table = $wpdb->prefix . 'matches';
$results_table = $wpdb->prefix . 'match_results';
$game_scores_table = $wpdb->prefix . 'match_games';
// Get all singles-ranked players
$players = $wpdb->get_results("
SELECT
r.player_id,
r.player_rank,
CONCAT(p.first_name, ' ', p.last_name) AS player_name,
(
SELECT COUNT(*) FROM {$wpdb->prefix}challenges c
WHERE c.challenged_id = p.player_id
AND c.match_type_id = 1
AND c.status = 'pending'
) AS pending_challenges
FROM $ranking_table r
JOIN $players_table p ON r.player_id = p.player_id
WHERE r.match_type_id = 1
ORDER BY r.player_rank ASC
", ARRAY_A);
if (empty($players)) {
return "
No ladder data available for singles.
";
}
ob_start();
echo "";
echo "
Rank
Player
Matches Played
Match Wins
Match Losses
Game Wins
Game Losses
Win Streak
Challenges
";
foreach ($players as $player) {
$player_id = (int)$player['player_id'];
// Matches won/lost
$match_stats = $wpdb->get_row($wpdb->prepare("
SELECT
COUNT(*) AS matches_played,
SUM(CASE
WHEN mp.team_number = 1 AND r.team1_score > r.team2_score THEN 1
WHEN mp.team_number = 2 AND r.team2_score > r.team1_score THEN 1
ELSE 0
END) AS wins,
SUM(CASE
WHEN mp.team_number = 1 AND r.team1_score < r.team2_score THEN 1
WHEN mp.team_number = 2 AND r.team2_score < r.team1_score THEN 1
ELSE 0
END) AS losses
FROM $match_players_table mp
JOIN $matches_table m ON mp.match_id = m.match_id
JOIN $results_table r ON r.match_id = m.match_id
WHERE mp.player_id = %d
AND m.match_type_id = 1
", $player_id), ARRAY_A);
$wins = $match_stats['wins'] ?? 0;
$losses = $match_stats['losses'] ?? 0;
$matches_played = $match_stats['matches_played'] ?? 0;
// Game wins/losses
$game_stats = $wpdb->get_row($wpdb->prepare("
SELECT
SUM(CASE
WHEN mp.team_number = 1 AND gs.team1_score > gs.team2_score THEN 1
WHEN mp.team_number = 2 AND gs.team2_score > gs.team1_score THEN 1
ELSE 0
END) AS games_won,
SUM(CASE
WHEN mp.team_number = 1 AND gs.team1_score < gs.team2_score THEN 1
WHEN mp.team_number = 2 AND gs.team2_score < gs.team1_score THEN 1
ELSE 0
END) AS games_lost
FROM $match_players_table mp
JOIN $matches_table m ON mp.match_id = m.match_id
JOIN $game_scores_table gs ON gs.match_id = m.match_id
WHERE mp.player_id = %d
AND m.match_type_id = 1
", $player_id), ARRAY_A);
$games_won = $game_stats['games_won'] ?? 0;
$games_lost = $game_stats['games_lost'] ?? 0;
// Win Streak
$win_streak = get_player_win_streak($player_id);?>
—
Подробнее здесь: https://stackoverflow.com/questions/797 ... -on-a-word