在控制器中对获取的数据进行排序

Sorting fetched data in controller

我很难整理我的数据。因为我正在使用 2 列获取数据。有没有办法在控制器 ajax 模型中对其进行排序?任何建议将不胜感激。

这里可以看到,我把test 1的所有数据都拿过来了,但是拿来的时候,并没有按升序排列。

我的数据库:

查看:

<div id="testdisplay"></div>

Ajax

<script>

testfetching();
function testfetching(){

var eventID = $('#eventID').val();

  $.ajax({
        url:"<?=site_url('testing/fetching')?>",
        method:"POST",
        data:{eventID:eventID},
        dataType:"json",
        success:function(data){
                
        $('#testdisplay').html(data);
    
            
        
        },
    })

}
</script>

控制器:

    // is there a way where i can sort my data here in controller?
    // I have tried sorting it using sort($data); but it is not working. 


         function fetching(){
        $entry= $this->matchings->entryfetch();
        
        
        $data = '';
        $data='

    <div class="card table-hover table-responsive" style="display: flex;">
    <table class="mt-3 ml-2" style="">
    <thead>
    <tr>
    <th style="float: left;">NO.</th>
    <th style="float: left;">ENTRY NAME</th>



    </tr></thead>';
        
        
        foreach($entry as $entry){
            
            $match= $this->matchings->matchfetch($entry->handlerID);
            
            $data.='<thead>
            <tr>
            <th style="float: left; page-break-after: always;"><hr style="">'.$entry->handlerID.'&nbsp;'.$entry->entryName.'</th><th>&nbsp;</th>  ';
            
            
            
            foreach($match as $match){
                

                
                if($match->handlerIDM === $entry->handlerID){
                    $name=$match->handlertestW;
                    $count=$match->cockNoM;
                }else{
                    
                    $name=$match->handlerM;
                    $count=$match->cockNoW;
                }
                
                
    
                
                
                if($match->handlerM === $entry->entryName){
                    $data.='<tbody>
<tr><td style="float: right; margin-right: 5px;">'.$count.'</td>
    


';
                    
                }else{
                    
                    $data.='<tbody><tr> <td style="float: right; margin-right: 5px;">'.$count.'</td>
                        
                       


';
                    
                }
                
                
                
                
                $data.='<td></td></tr></tbody>';
                //
            }
            
            
        }
        
        $data .='</table></div>';

        echo json_encode($data);
 
     
    }

型号:

 function entryfetch(){
        $eventID = $this->input->post('eventID');
        
        $this->db->where('eventID', $eventID);
        $this->db->group_by('handlerID');
        $this->db->order_by('handlerID');
        $query = $this->db->get('entry_test');
        
        return $query->result();
        
        
    }
    
    function matchfetch($entryid){
        
        $eventID = $this->input->post('eventID');
        
        $this->db->where('eventID', $eventID);
        $this->db->where('handlerIDM', $entryid);

      
      
        
        $this->db->or_where('handlerIDW', $entryid);
        $this->db->where('eventID', $eventID);
      
       
    
        $query = $this->db->get('matching');
        
        return $query->result();
        
        
    }

我在您的查询中没有看到任何订单类型。即 ASC、DESC

$this->db->order_by('handlerID', 'ASC');

如果您尝试对同一 table 的两列中的数据进行排序,您需要使用 UNION。

我将只使用您在 post 顶部提供的列和您查询中的列,希望这能帮助您入门。

型号:

function matchfetch($entryid){
    $eventID = $this->input->post('eventID');

    return $this->db->query(
        'SELECT handlerM AS handler, cockNoM AS cockNo
        FROM matching
        WHERE eventID = ? AND handlerIDM = ?

        UNION

        SELECT handlertestW AS handler, cockNoW AS cockNo
        FROM matching
        WHERE eventID = ? AND handlerIDW = ?

        ORDER BY cockNo', [
        $eventID, $entryID, $eventID, $entryID
    ])->result();
}

每个 SELECT 查询创建一个 table(一个用于 handlerM+cockNoM,一个用于 handlertestW+cockNoW)并且 UNION 将它们堆叠起来:

然后您可以使用 ORDER BY 来排序结果 table。

handlerM/handlertestW 在结果集中重命名为 handler 并且 cockNoM/cockNoW 重命名为 cockNo,因此您还需要更新您的控制器:

控制器:

foreach($match as $match){
    $name=$match->handler;
    $count=$match->cockNo;

    $data.='<tbody><tr><td style="float: right; margin-right: 5px;">'.$count.'</td>';
    $data.='<td></td></tr></tbody>';
}

如果您的结果集中需要额外的列,请将它们添加到两个 SELECT 查询中。