복붙노트

[SQL] ColdFusion에서 - 변수 필드 이름은 데이터베이스 쿼리 결과를 통해 반복 할 때

SQL

ColdFusion에서 - 변수 필드 이름은 데이터베이스 쿼리 결과를 통해 반복 할 때

나는 테이블에 열 이름의 집합이 - 예를 들어, foo1은,에서는 foo2, foo3, foo4. 나는 루프를 통해 동적으로 이러한 열 이름을 참조 할 :

<cfloop index="i" from="1" to="4">
  <cfset foo = Evaluate("query.foo" & i)>
</cfloop>

위는 작동하지 않습니다 - ColdFusion에서는 query.foo1가 쿼리 결과에 대한 유효한 참조 경우에도 오류 "변수가 정의되지 않았습니다"가 발생합니다. 어떻게하면 다른 할 수 있습니까?

해결법

  1. ==============================

    1.그런 것들에 대한) (평가 사용하지 마십시오! 그것은 느린 피해야한다.

    그런 것들에 대한) (평가 사용하지 마십시오! 그것은 느린 피해야한다.

    <cfloop index="i" from="1" to="4">
      <cfset foo = query["foo" & i][query.CurrentRow]>
    </cfloop>
    

    또는 당신이 좋아하는 경우 :

    <cfloop index="i" from="1" to="4">
      <cfset foo = query["foo#i#"][query.CurrentRow]>
    </cfloop>
    

    () 평가하기의 코드 비트를 평가한다. 언어 통합, 더 적절한 방법으로 더 우아하게 해결 될 수있는 일을 위해 그것을 사용하지 마십시오.

    편집하다:

    액세스하는 쿼리는 "각 브래킷"- 구문 개체 때 (1 기) 행 번호 지수 (쿼리 [ "foo는 # i 서 #"] [ROWNUM])에 추가해야합니다. 전통이 - 구문 (query.foo1)을 "점"을 사용하면 현재 행은 암시 적이다.

    명시 적으로 현재 행에 액세스하려면 QueryObject.CurrentRow 속성을 사용합니다. 그러나 QueryObject.RecordCount 어떤 양의 정수의 최대 수 있습니다. 범위 체크는 CurrentRow와 이외의 아무 것도 좋습니다.

    이 흥미로운 분야를 엽니 다 : 당신은 '랜덤 액세스'와 쿼리 개체를 사용하기 시작할 수 있습니다. 이전 (CFMX 전에) 당신이 할 수있는 모든 당신이 찾는 그 일을 잡아 당겨, ​​처음부터 끝까지 반복 처리를했다. 지금은 당신이 다른 방법으로 사용할 수있는 중첩 된 구조체 / 배열 같다.

  2. ==============================

    2.당신은 매우 가깝습니다. 이 시도:

    당신은 매우 가깝습니다. 이 시도:

    <cfset query.foo1 = "foo val 1">
    <cfset query.foo2 = "foo val 2">
    <cfset query.foo3 = "foo val 3">
    <cfset query.foo4 = "foo val 4">
    
    <cfloop index="i" from="1" to="4">
            <cfset foo = Evaluate("query.foo#i#")>
            <cfoutput>#foo#<br></cfoutput>
    </cfloop>
    
  3. from https://stackoverflow.com/questions/1064305/coldfusion-variable-field-name-when-looping-through-database-query-results by cc-by-sa and MIT license