You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现赛事比分赔率按博彩市场分组,避免重复输出并横向展示

解决方案

以下是修改后的完整代码,实现按博彩市场分组、不重复显示市场名称,同时让比分横向排列:

if(isset($_POST['gem_id'])) {
    // 调整排序规则,先按市场ID分组排序
    $query = 'SELECT correct_score.id, correct_score.lig_id, 
                    correct_score.fixt_id, correct_score.mark_id, 
                    correct_score.score, correct_score.odds, 
                    correct_score.last_update,
                    fixtures.lig, fixtures.home_team, fixtures.away_team, 
                    leagues.league, bet_markets.market
            FROM correct_score
                INNER JOIN fixtures ON correct_score.fixt_id = fixtures.id 
                INNER JOIN leagues ON correct_score.lig_id = leagues.id
                INNER JOIN bet_markets ON correct_score.mark_id = bet_markets.id 
            WHERE correct_score.fixt_id =? 
            ORDER BY correct_score.mark_id ASC, correct_score.id ASC'; // 修改排序

    $statement = $conn->prepare($query);
    $statement->execute([$_POST['gem_id']]);
    $statement->setFetchMode(PDO::FETCH_ASSOC);
    $result = $statement->fetchAll();
    
    if($result) {
        $current_market_id = null; // 记录当前市场ID,避免重复输出标题
        foreach ($result as $row) {
            // 当切换到新市场时,输出市场标题并开启新的row容器
            if($row['mark_id'] !== $current_market_id) {
                // 如果不是第一个市场,先闭合上一个row
                if($current_market_id !== null) {
                    echo '</div>';
                }
                $current_market_id = $row['mark_id'];
?>
            <p class="card-title text-center text-uppercase fw-bolder mt-3"><?=$row['market'];?></p>
            <div class="row align-items-center justify-content-between">
<?php
            }
            // 输出当前比分赔率的列,同市场的都在同一个row里
?>
                <div class="col-3">
                    <p class="chose" market="<?=$row['mark_id'];?>" fixture="<?=$row['fixt_id'];?>" pick="<?=$row['score'];?>" odds="<?=$row['odds'];?>"> 
                        <button type="button" class="btn btn-sm btn-primary ">
                            <span class="text-start"><?=$row['score'];?> </span>
                            <span class="text-end ms-5"><?=$row['odds'];?></span>
                        </button>
                    </p>
                </div>
<?php
        }
        // 闭合最后一个row容器
        echo '</div>';
    } else { 
?>
     <div class="col-12"></div>
<?php 
    }
}

修改说明

  1. 调整SQL排序规则:将ORDER BY correct_score.id ASC改为ORDER BY correct_score.mark_id ASC, correct_score.id ASC,确保同一博彩市场的比分数据连续排列,为分组输出提供基础。

  2. 增加市场跟踪变量:新增$current_market_id变量,每次循环对比当前行的mark_id,仅在切换新市场时输出市场标题,避免重复显示。同时注意切换市场时闭合上一个row容器,保证HTML标签结构合法。

  3. 重构HTML结构:将同市场的所有比分列(col-3)放入同一个row容器内,借助Bootstrap栅格系统实现比分横向排列,每行自动容纳4个比分(col-3占12栅格的3份),超出后自动换行。

内容的提问来源于stack exchange,提问作者Juma Ijesun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:35:15