我正在尝试在ColdFusion 9服务器上创建一个包含数据表和服务器分页的表。我遇到的问题是,当我使用偏移量创建查询时,限制绘制的限制为每页只有100个结果,因为该表具有记录的唯一值和标识的唯一值。换句话说,我有一个记录compname
,其唯一ID(特定于compname
)可以分配给3个客户端但具有不同的数据。我只获得有限数量的记录,因为偏移量和限制仅返回查询的前100个结果中的记录数。
如果我创建相同的查询,但在具有唯一记录的表中,一切正常。此外,如果我不使用偏移和限制我得到正确的结果,但加载时间非常高,因为它返回整个查询。
有谁知道如何做到这一点?
更新1
我正在使用SQL Server 2008 R2
这是cfc中的查询示例:
<cfquery name="getdata" datasource="#data.dsn#" >
WITH Rows AS
(
SELECT
table1.unique_id,
table1.Name,
table2.data,
table2.unique_id ,
table2.data3,
table2.data4,
table2.data5,
table2.data6,
table2.data7,
table2.data8,
table2.data9,
table3.data10,
table3.data11,
table3.data12,
table3.data13,
table3.data14,
table4.data15,
table4.data16,
ROW_NUMBER() OVER(ORDER BY #sort# #order# ) as [Row]
FROM
(table1
inner join table2
on table1.unique_id=table2.unique_id)
left join table3 on (table1.unique_id=table3.unique_id)
left join table4 on (table1.unique_id=table4.unique_id)
where table1.otherid= #clientid#
and table1.active=1
<cfif Search NEQ ''>
and (table1.unique_id like '%#arguments.Search#%'
OR table2.data like '%#arguments.Search#%'
)
)
SELECT
*
FROM
Rows
where Row >= #offset + 1# and Row <= #offset + limit#
<cfset resultStruct = Structnew() />
<cfset resultStruct["rows"] = ArrayNew(1) />
<cfset count = 1/>
<cfoutput query="getdata" group="unique_id">
<cfset resultStruct["rows"][count]['count'] = count />
<cfset resultStruct["rows"][count]['unique_id'] = getdata.unique_id
/>
<cfset resultStruct["rows"][count]['data'] = getdata.data2 />
<cfset resultStruct["rows"][count]['data2'] = getdata.data3 />
<cfset resultStruct["rows"][count]['data3'] = getdata.data4 />
<cfset resultStruct["rows"][count]['data4'] = getdata.data5 />
<cfset resultStruct["rows"][count]['data5'] = getdata.data6 />
<cfset resultStruct["rows"][count]['data6'] = getdata.data7 />
<cfset resultStruct["rows"][count]['data7'] = getdata.data8 />
<cfset resultStruct["rows"][count]['data8'] = getdata.data9 />
<cfset resultStruct["rows"][count]['data9'] = getdata.data10 />
<cfset resultStruct["rows"][count]['data10'] = getdata.data11 />
<cfset resultStruct["rows"][count]['data11'] = getdata.data12 />
<cfset COUNT = COUNT + 1/>
</cfoutput>
<cfreturn SerializeJSON(resultStruct) />
</cffunction>
这是数据表js
$(document).ready(function(e) {
$('#table1').bootstrapTable({
method: 'get',
url: 'test.cfc?method=getdata',
cache: false,
height: 700,
striped: true,
pagination: false,
pageList: [100, 200, 500],
rememberOrder:true,
deferRender: true,
serverside:true,
showColumns: true,
showRefresh: true,
paginationLoop:false,
clickToSelect: true,
sortName:"data",
columns: [
{field: 'count',title: 'No',sortable:true},
{field: 'unique_id',title: 'Unique ID',sortable:true},
{field: 'data',title: 'Data',align: 'center',valign: 'middle',sortable:true},
{field: 'data2',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data3',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data4',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data5',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data6',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data7',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data8',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data9',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data10',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
{field: 'data12',title: 'Sample Data',align: 'left',valign: 'top',sortable:true},
]
});
function getOrder() {
return $table.bootstrapTable('#table1').sortOrder
=== 'desc' ? -1 : 1;
}
function numberSorter(a, b) {
if (!a) return -1 * getOrder();
if (!b) return 1 * getOrder();
if (a < b) return -1;
if (a > b) return 1;
return 0;
}
});
当我运行此查询时,我只得到30个结果而不是正常的300 ..如果我将偏移限制从100更改为1500,我将返回完整的数据集。根据我的理解,当我使用limit和offset时,查询返回带有限制的表。当你拥有表中唯一的数据时,这样可以正常工作。但是我有重复的数据..对于每个客户端,它可能恰好具有相同的unique_id,因此clientid
1我有一个唯一ID为100的记录,这是在db的前100行中。但对于客户端ID 1我可以有一个unique_id 299,它在接下来的499行中。当我运行查询时,我回到客户端ID 1,只返回db中前100行中找到的unique_id。如果我不在输出中使用group,我会从前100行得到100个带有重复unique_id的结果..所以对于unique_id 1我得到unique_id 1 - 对于clientid 1,unique_id 1 - 来自clientid 2,依此类推。所以,我的主要问题是如何创建一个查询,返回少量记录而没有偏移和限制。希望这涵盖了一切。