【问题标题】:Display top 10 results in codeigniter and display 1st, 2nd and 3rd top values在 codeigniter 中显示前 10 个结果并显示第 1、第 2 和第 3 个最高值
【发布时间】:2018-07-16 19:54:44
【问题描述】:

我得到这样的输出页面(如下图所示)

我希望向得分最高的人展示金像,向第二名的人展示银牌,向其他人展示铜牌

我正在使用这样的代码

<div class="row">
<div class="col-lg-12">
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title"><i class="fa fa-tasks"></i> ScoreBoard</h3>
        </div>
        <div class="panel-body">
           <div class="col-sm-12">
                <table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered">

                    <tbody>
                        <?php
                            $total_exams1 = $this->db->select('title_id')   
                                    ->from('exam_title')
                                    ->count_all_results();

                                $b1 = $this->db->select('*, (sum(result.result_percent)) / '.$total_exams1.' as percent')   
                                                    ->group_by('users.user_id')                                     
                                                    ->from('result')
                                                    ->order_by("percent", "desc" )
                                                    ->join('users', 'users.user_id = result.user_id', 'left')
                                                    ->join('states', 'users.state = states.state_id', 'left')
                                                    ->join('user_zone', 'users.user_zone = user_zone.user_zone_id', 'left')
                                                    ->limit("10")
                                                    ->get()
                                                ->result(); 
                            $j = 1; 
                            foreach($b1 as $z) {                                            
                        ?>
                            <tr class="<?= ($i & 1) ? 'even' : 'odd'; ?>">                                    
                                <td style="width:5%;"><?php echo $j; ?></td> 
                                    <?php if($z->image == "") { ?>
                                <td class="hidden-x" style="width:35%;">    
                                    <img class="userImgTop10n" src="<?php echo base_url('user-avatar/avatar-placeholder.jpg') ?>" alt="Profile Picture" />
                                    <div class="image_righ">
                                        <b><?php echo $z->user_name; ?></b><br>
                                        <?php echo $z->state_name; ?><br>
                                        <?php echo $z->user_zone_name; ?>
                                    </div>
                                </td>                                   
                                    <?php } else { ?>
                                <td class="hidden-x" >
                                    <img class="userImgTop10n" src="<?php echo base_url("user-avatar/".$z->image); ?>" alt="Profile Picture" />
                                    <div class="image_righ">
                                        <b><?php echo $z->user_name; ?></b><br>
                                        <?php echo $z->state_name; ?><br>
                                        <?php echo $z->user_zone_name; ?>
                                    </div>
                                </td>                                   
                                    <?php } ?>          
                                <?php                   
                                    $exams_attended1 = $this->db->select('title_id')    
                                        ->where('user_id', $z->user_id)
                                        ->from('result')
                                        ->group_by('user_id')
                                        ->count_all_results();
                                ?>
                                <td class="hidden-xxs"><b><?php echo $exams_attended1; ?></b><br>Exams Attended</td>
                                <td class="hidden-xxs"><b><?php echo $total_exams1; ?></b><br>Total Exams</td>
                                <td class="hidden-x">
                                    <b><?php echo round($z->percent, 2); ?> %</b><br>Avg Result 
                                          <div class="badge_righ">
                                          <?php if($j == 1) { ?>                                              
                                          <span><img class="userBadge" src="<?php echo base_url('Badge_Gold.png') ?>" alt="Badge Gold" /></span>                                             
                                          <?php } 
                                          if($j == 2) { ?>                                           
                                          <span><img class="userBadge" src="<?php echo base_url('Badge_Silver.png') ?>" alt="Badge Gold" /></span>                                            
                                          <?php } if($j > 2) { ?>                                              
                                          <span><img class="userBadge" src="<?php echo base_url('Badge_Bronze.png') ?>" alt="Badge Gold" /></span>                                    
                                          <?php } ?>
                                          </div>
                                </td>                                   
                            </tr>
                            <?php 
                            $j++;
                                }
                            ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

在上面的屏幕截图中,前 3 行应该是金色图像(因为标记相同)。

【问题讨论】:

  • 根据您的奖牌在您的查询中尝试另一个订单
  • 为此,您必须确定希望出现在排行榜中的百分比范围。您所做的是正确的,而不是与 1 或 2 一起使用平均百分比值。并根据平均百分比显示列表
  • 我在第一排使用金牌,第二排使用银牌,其他人使用铜牌。我希望根据分数显示奖牌,请告诉我如何做到这一点

标签: php html mysql css codeigniter


【解决方案1】:

您可以创建一个包含唯一反向排序平均分数的临时数组。然后,在授予奖牌时,不要检查位置(第 1、第 2、第 3...),而是检查分数是否与该临时数组中的第 1、第 2 或第 3 分数匹配。

对于您发布的屏幕截图,数组如下所示:

$scores = [92.5, 90, 87.5];

金牌将是所有得分$scores[0],银牌是$scores[1],铜牌是$scores[2](除非你希望每个人青铜)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2017-12-12
  • 2018-05-24
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多