使用SQL Server查询

时间:2018-03-21 11:11:39

标签: sql ajax coldfusion datatables coldfusion-9

我正在尝试在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,依此类推。所以,我的主要问题是如何创建一个查询,返回少量记录而没有偏移和限制。希望这涵盖了一切。

0 个答案:

没有答案