2017-08-24 132 views
1

我们正在尝试在coldfusion中实现分页。因此,我需要对sql查询进行更改以仅提取特定数量的数据,并且当点击下一个按钮时,应该查询下一组数据。在Coldfusion中实现分页

SELECT History.*,User.FirstName,User.LastName 
    FROM History 
    LEFT OUTER JOIN User ON History.UserID = User.UserID 
    WHERE History.UserID = <CFQUERYPARAM VALUE="#UserID#" CFSQLTYPE="CF_SQL_INTEGER"> 
    AND Type IS NOT NULL 
    AND SubType IS NOT NULL 
    ORDER BY #OrderBy# #sort# 

任何人都可以帮助我做同样的以上给出的查询。

例如查询:

SELECT * FROM (
     SELECT ROW_NUMBER() OVER(ORDER BY SearchID) AS NUMBER, 
       * FROM search_history 
       WHERE UserID=111 
       AND Date >= #DateVal#  
      ) AS TBL 
    WHERE NUMBER BETWEEN ((#pageNum# - 1) * #MaxRows# + 1) AND (#pageNum# * #MaxRows#) 
    ORDER BY #OrderBy# #sort# 
+0

注意ORDER BY中的SQL注入。什么版本的ColdFusion和SQL? – Shawn

回答

1

首先,这是与SQL Server和ColdFusion的不是一个问题。您只需使用ColdFusion内联生成查询。如果你创建这个查询作为存储过程会更好,这本质上会比内联查询更好。

其次,this answer是我发布的示例的基础。 SQL Server着名的不支持OFFSETLIMIT,这使得分页变得非常简单。这些一直在MySQL和postgreSql中。

第三,从SQL Server 2012开始,现在支持OFFSETFETCH(基本上是LIMIT)。 Here is a good example如何工作。

本示例使用SQL @parameters。理想情况下,您将在存储过程中声明这些内容,但您可以在内联查询中声明并设置它们。只要确保使用cfqueryparam来防范SQL Injection攻击。

SELECT * 
FROM (
    SELECT 
     h.column1 
     , h.column2 
     , u.FirstName 
     , u.LastName 
     , SELECT ROW_NUMBER() OVER (ORDER BY @ORDER_BY @SORT_ORDER) AS RowNum 
    FROM 
     dbo.History h 
    INNER JOIN 
     dbo.User u ON h.UserID = u.UserID 
    WHERE 
     h.UserID = @USER_ID 
     AND 
     h.Type IS NOT NULL 
     AND 
     h.SubType IS NOT NULL 
) AS HistorySearch 
WHERE 
    RowNum >= @ROW_START 
    AND 
    RowNum < @ROW_END 
ORDER BY 
    RowNum 
您需要根据页码和页面大小变量计算出 ROW_STARTROW_END的值。

最后,不要在主选择查询中使用SELECT *。这是一个不好的做法。

0

根据您返回多少数据,您可以正常进行查询,并使用冷聚变对输出进行分页。如果你可以避免在查询中使用*,这是一个好主意。

<cfparam name="StartAt" default="1"> 
<cfparam name="MaxRows" default="100"> 

<cfoutput name="QueryName" startrow="#StartAt#" maxrows="#maxRows#" > 

变量MAXROWS和StartAt会在您的形式,当用户点击一个或下一个设置,并顺利通过。

如果你有一个非常大的结果集,那么限制返回的数据将是一个更好的主意,因为你已经提出。

+0

查询结果非常大,导致应用程序崩溃。所以只有我们开始考虑替代方案。 –