在控制器中对获取的数据进行排序
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.' '.$entry->entryName.'</th><th> </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 查询中。
我很难整理我的数据。因为我正在使用 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.' '.$entry->entryName.'</th><th> </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 查询中。