向数据表添加排名
Adding Ranking to Datatables
我正在尝试根据数据中的总点数计算排名table
Javascript 正在获取正确的值并在控制台中正确排名,但是它没有将值放入数据中table
$(function() {
var table=$('#points-table').DataTable({
processing: true,
serverSide: true,
ajax: 'http://localhost/edpark/public/get/points',
columns: [
{ data: 'rank', defaultContent: ''},
{ data: 'first_name'},
{ data: 'last_name'},
{ data: 'TotalPoints'},
],
drawCallback: function () {
api = this.api();
var arr = api.columns(3).data()[0]; //get array of column 3 (extn)
console.log(arr);
var sorted = arr.slice().sort(function(a,b){return b-a});
var ranks = arr.slice().map(function(v){ return sorted.indexOf(v)+1 });
console.log(sorted);
console.log(ranks);
// interate through each row
api.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
var rank = ranks[rowLoop];
data.rank = ranks[arr.indexOf(data.extn)]; //set the rank column = the array index of the extn in the ranked array
} );
api.rows().invalidate();
}
});
})
我的 dev table 中有 3 行,它们的总分分别为 60、10、5,它们被正确地写入控制台,并且排名为 1、2、3
但是在我的 table 中,Rank 字段仍然是空白的。
谢谢
编辑
添加请求的HTML代码和数据集
HTML
@extends('layouts.app')
@section('content')
<div class="container-fluid">
@if(session()->has('success'))
<div class="row">
<div class="col-12 alert alert-success" role="alert">
<strong>{{session()->get('success')}}</strong>
</div>
</div>
@endif
@if(session()->has('failure'))
<div class="row">
<div class="col-12 alert alert-danger" role="alert">
<strong>{{session()->get('failure')}}</strong>
</div>
</div>
@endif
<div class="row">
<div class="col-lg-12 col-sm-12">
<div class="card">
<div class="card-body">
<h3 class="text-center">Points Report</h3>
<div class="table-responsive">
<table class="table table-striped table-no-boreded table-hover" width="100%" id="points-table">
<thead class = "text-primary">
<h4> </h4>
<tr>
<th class="text-center">Rank</th>
<th class="text-center">First Name</th>
<th class="text-center">Last Name</th>
<th class="text-center">Total Points</th>
<th width="10%"></th>
</tr>
</thead>
<tbody class = "text-center">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
数据集
Member_id| Points | Reason |
1 10 --
5 60 --
4 10 --
1 -5 --
希望对您有所帮助
当您执行诸如添加或删除行、更改 table 的排序、筛选或分页特征等操作时,您需要 DataTables 更新显示以反映这些更改。
api.draw()
>>> 此功能就是为此目的而提供的
通过将以下内容添加到我的查询中解决了这个问题
SelectRaw->("RANK () OVER (ORDER BY SUM(points.value) DESC) 'rank'")
然后我可以在DataTable中正常调用排名数据
我正在尝试根据数据中的总点数计算排名table
Javascript 正在获取正确的值并在控制台中正确排名,但是它没有将值放入数据中table
$(function() {
var table=$('#points-table').DataTable({
processing: true,
serverSide: true,
ajax: 'http://localhost/edpark/public/get/points',
columns: [
{ data: 'rank', defaultContent: ''},
{ data: 'first_name'},
{ data: 'last_name'},
{ data: 'TotalPoints'},
],
drawCallback: function () {
api = this.api();
var arr = api.columns(3).data()[0]; //get array of column 3 (extn)
console.log(arr);
var sorted = arr.slice().sort(function(a,b){return b-a});
var ranks = arr.slice().map(function(v){ return sorted.indexOf(v)+1 });
console.log(sorted);
console.log(ranks);
// interate through each row
api.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
var rank = ranks[rowLoop];
data.rank = ranks[arr.indexOf(data.extn)]; //set the rank column = the array index of the extn in the ranked array
} );
api.rows().invalidate();
}
});
})
我的 dev table 中有 3 行,它们的总分分别为 60、10、5,它们被正确地写入控制台,并且排名为 1、2、3
但是在我的 table 中,Rank 字段仍然是空白的。
谢谢
编辑
添加请求的HTML代码和数据集
HTML
@extends('layouts.app')
@section('content')
<div class="container-fluid">
@if(session()->has('success'))
<div class="row">
<div class="col-12 alert alert-success" role="alert">
<strong>{{session()->get('success')}}</strong>
</div>
</div>
@endif
@if(session()->has('failure'))
<div class="row">
<div class="col-12 alert alert-danger" role="alert">
<strong>{{session()->get('failure')}}</strong>
</div>
</div>
@endif
<div class="row">
<div class="col-lg-12 col-sm-12">
<div class="card">
<div class="card-body">
<h3 class="text-center">Points Report</h3>
<div class="table-responsive">
<table class="table table-striped table-no-boreded table-hover" width="100%" id="points-table">
<thead class = "text-primary">
<h4> </h4>
<tr>
<th class="text-center">Rank</th>
<th class="text-center">First Name</th>
<th class="text-center">Last Name</th>
<th class="text-center">Total Points</th>
<th width="10%"></th>
</tr>
</thead>
<tbody class = "text-center">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
数据集
Member_id| Points | Reason |
1 10 --
5 60 --
4 10 --
1 -5 --
希望对您有所帮助
当您执行诸如添加或删除行、更改 table 的排序、筛选或分页特征等操作时,您需要 DataTables 更新显示以反映这些更改。
api.draw()
>>> 此功能就是为此目的而提供的
通过将以下内容添加到我的查询中解决了这个问题
SelectRaw->("RANK () OVER (ORDER BY SUM(points.value) DESC) 'rank'")
然后我可以在DataTable中正常调用排名数据