2012-07-11 4 views
2

쿼리 쿼리를 사용하여 특정 행 범위를 선택하는 방법은 무엇입니까? 당신이 할 설정 원본 레코드에 열을 추가해야합니다 있도록쿼리 쿼리에서 행 범위 선택

는 CF에서 기본적으로 이렇게

<cfquery name="myQuery" maxrows ="20" startrow="12"> 
SELECT * 
FROM previous_query 
WHERE row_numer >= 12 
</cfquery> 

그런 종류의 ...

+0

'선택 TOP 20'을 할 수 없습니까? –

+1

coldfusions 쿼리 쿼리는 TOP를 지원하지 않으며, 레코드 집합의 모든 부분에서 20 개의 행을 검색 할 수 있기를 원합니다. – Dpolehonski

답변

5

이것은 까다로운 문제 였지만 문제는 나를 흥미롭게 만들었습니다. I 생각해보십시오. 해결책이있을 수도 있습니다.

원하는 행보다 먼저 모든 것을 삭제 한 다음 원하는 행 다음을 모두 삭제하는 기능을 작성했습니다.

rowrange() 함수는 3 개의 매개 변수를 사용합니다. 1. 작업중인 queryname. 2. 원하는 시작 행 3. 원하는 행 수.

업데이트 : 내 친구 John Whish는 실제로이 작업을 수행하기 위해 반복 작업을 수행 할 필요가 없다고 지적했습니다. 루프를 제거하면 확장 성이 훨씬 향상됩니다.

<cfquery name="myQuery"> 
SELECT * 
FROM previous_query 
WHERE row_numer >= 12 
</cfquery> 


<cfset rowRange(myQuery,7,4)> 
<cfdump var="#myQuery#"> 

<cffunction name="rowRange" hint="return a range of rows from a given query"> 
    <cfargument name="qObj" type="query" required="true"> 
    <cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include"> 
    <cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows"> 


    <cfset var i = arguments.start+arguments.range-1> 
    <cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)> 
    <cfset arguments.qObj.removeRows(0,arguments.start-1)> 

    <cfreturn arguments.qObj> 
</cffunction> 
+0

아주 좋은 솔루션이며 구현할 수 있습니다. 여러 위치에. 고마워요 – Dpolehonski

+0

코드 업데이트 : 내 친구 인 John Whish는 실제로이 작업을 수행하기 위해 반복 작업을 수행 할 필요가 없다고 지적했습니다. 루프를 제거하면 확장 성이 훨씬 향상됩니다. –

+0

올해 존 쉐이크를 CF.objective()로 만났습니다. 그는 클라이언트를 SQL 서버로 마이그레이션해야한다고 말했습니다. 내가 할 수 있으면 좋겠어, 나는이 기능을 내 Access Access 해킹 라이브러리에 추가 할 것이다. 감사. – Dpolehonski

0

는 지원되지 않습니다 예를 들어, 너를 믿어.

SELECT ..., row_num AS Counter 

Row_Num은 DBMS에 따라 다를 수 있습니다.

+0

그랬 겠지만 MS Access는 row_num 유형의 기능을 지원하지 않습니다. 필자는 queryAddColumn을 사용하고 QoQ를 수행하기 전에 rownumber 열을 수동으로 추가하여 시뮬레이션했습니다. – Dpolehonski

+0

글쎄, 그건 사실이 아니야, 당신은 쉽게 쿼리를 조작 할 수있다. http://www.cwithb.com/2010/09/simplified-take-on-an-access-database-query-sql-row_numberranking-equivalent/ – Busches

+0

사실이지만, 큰 데이터 세트를 가진 액세스 데이터베이스에서 서브 쿼리를 실행하는 것이 지수 적으로 비효율적이되는 테스트를 통해 발견되었습니다. CF로 수동으로 수행하는 것이 더 빠릅니다. – Dpolehonski