2013-01-18 4 views
3

이것이 가능한지 확실하지 않습니다. 내가 뭘 하려는지 쿼리를 통해 출력 문자열을 빌드하는 것입니다. 출력 "이름"을 연결하고 마지막에 "값"을 추가합니다. 그런 다음 문자열을 출력합니다. 나는 이것이 가능하다고 생각하지 않는다. 그러나 나는 어떤 대안을 찾고있다.Coldfusion 동적 쿼리 출력

그래서 이것은 내가 무엇을 가지고 :

qry1 메인 쿼리입니다. qry2은 문자열 끝에 추가 할 값을 가져옵니다. 그래서 변수 test의 값은 다음과 같이 보일 것이다 :이 쿼리 객체의 일부로서 qry1에 감각을 만들 것 "variables.qry1.100"

합니다. 그래서이 문자열은 데이터베이스에서 올바른 값을 반환 할 것입니다. 100

<cfoutput> 
<cfloop query="variables.qry2"> 
    <cfset test = variables.qry1. & variables.qry2.#valueID#> 
<td>#test#</td> 
</cfloop> 
</cfoutput> 

많은 감사합니다.

JC

+0

정확하게 출력해야 할 내용은 무엇입니까? 동적 변수 이름을 테스트하고 그 변수를 출력 하시겠습니까? –

+0

예 그렇다면 test는 # variables.qry1.100 #을 하위 쿼리 이름과 동일하게 읽은 다음 하위 쿼리를 출력하므로 # variables.qry1.100 #에 대해 12324가 반환 될 수 있습니다. # 동적 인 경우 wsnt 그냥 # variables.qry1을 읽습니다. .100 # 쿼리에서 100 값을 반환합니다. 나는 쿼리에서 값을 출력하는 출력 문자열을 동적으로 생성하려고합니다. – jeeperscreepers

+0

답변을 추가했습니다. 근데 왜 이러는거야? 한 쿼리 출력 값을 사용하여 다른 쿼리의 열을 선택하는 것이 이상하게 보입니다. 나에게 최소한. –

답변

4

무엇 당신의 일을하려고하는 것은 가능하지만, 먼저 변수 이름을 구축 할 필요가있다. 테스트는 다음 variables.qry1.[valueID value] 될 것

<cfset test = "variables.qry1.#variables.qry2.valueID#"> 

대신

<cfset test = variables.qry1. & variables.qry2.#valueID#> 

는보십시오. [valueID value]는 쿼리에서 반환되는 값이므로 변수의 실제 값입니다.

그런 다음 variables.qry1.[valueID value] 값을 표시하십시오.

#evaluate(test)# 

아담 카메론의 대답에 의해 언급 한 바와 같이 UPDATE. 실제로는 evaluate() 기능을 피하려고 노력해야합니다. 성능이 뛰어나고 우수 사례로 간주되지 않습니다. 대신 오히려 (이 아담 카메론의 대답에서 복사)

#variables.qry1[variables.qry2.valueID][1]# 

참고 다음 코드를 사용 : 이동 세드릭의 더 나은 설명은 아담 카메론의 대답 봐.

+0

지식 공유에 많은 감사드립니다. 지금은 잘 작동합니다. – jeeperscreepers

+1

죄송합니다. Vincent : 당신을 downvoting. evaluate()은 현대 CFML에서 제안 된 솔루션의 일부가 될 수 없습니다. –

+0

@AdamCameron. 나는 오히려 그것이 나쁜 습관이라고 지적하고 또한 사람들이 당신의 대답을보아야한다고 덧붙이 기 위해 나의 대답을 업데이트했다. 묻는 사람이 이것을보고 바라기를 바랍니다. 많은 사람들이 대답을 받아들이고 결코 다른 대답을 읽지 않습니다. –

14

그래서 기본적으로 - 당신의 예제를 부여 - 당신이 전화 qry1의 열 100 (등, 아마 또한 200, 300 등), 그 값 100, 200, 300 등 qry2valueID 열의 행 값은? 그리고 qry1은 단일 행 쿼리입니까? 그게 맞습니까? queryName 쿼리 인 변수입니다

queryName[columnName][rowNumber] 

, columnName가 열 이름을 잡고 문자열이며, rowNumber : 동적 문자열의 열 이름이있는 경우

, 당신은이 구문을 사용합니다 행 번호 (실제 숫자 또는 하나를 포함하는 변수)입니다.

그래서 귀하의 예제 변수를 사용하면 코드는 다음과 같습니다

<td>#variables.qry1[variables.qry2.valueID][1]#</td> 

이 작업을 수행 할 evaluate()를 사용할 필요가 없습니다, 그리고 여기 좋은 해결책이 아니다. CF3의 경우 CFML에서 evaluate()을 사용할 필요가 거의 없습니다.

당신의 데이터 구조가 어떻게 생겼는지에 대한 배경 지식이 없지만 당신이 필요로하는 코드를 작성해야한다면 ... 오래 기다려야 할 것입니다. 그리고 당신이 어떻게 사물에 대해 가는지에 대해 열심히 노력하십시오.

0

아담에게는 올바른 해결책이 있습니다. 여기에 당신이하려는 일을하는 원래 코드의 수정 된 버전이 있습니다.

<cfoutput query="variables.qry1"> 
<tr> 
<cfloop query="variables.qry2"> 
    <cfset test = variables.qry1[variables.qry2.valueID][variables.qry1.currentrow]> 
    <td>#test#</td> 
</cfloop> 
</tr> 
</cfoutput>