2012-08-29 2 views
0

CF에서 행이 다른 행의 목록에있는 QoQ를 수행하려고합니다. 기본적으로 cftags에서 cfscript로 일부 코드를 이동합니다 (중요하지 않음). 태그에서 우리는 주요 쿼리를 가지며 우리는 몇 가지 중첩을하는 몇 개의 둥지를 가지고 있습니다. 나는 CFScript를하고 노력하고 다음과 같은 구문이이 이동하고있다 : 나는 다음과 같은 시도Coldfusion : QoQ에서 선택 WHERE X in (SELECT Y FROM QOQ)가 작동하지 않습니다.

var submissionList = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql=" 
SELECT submission_id FROM QoQsrcTable GROUP BY submission_id 
").execute().getResult(); 
var submissions = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql=" 
    SELECT * FROM QoQsrcTable WHERE submission_id IN (#submissionList.submission_id#) 
").execute().getResult(); 

을했지만 작동하지 :

var submissions = new Query(dbtype="query", QoQsrcTable=ARGUMENTS.answers, sql=" 
    SELECT * FROM QoQsrcTable WHERE submission_id IN (SELECT submission_id FROM QoQsrcTable GROUP BY submission_id) 
").execute().getResult(); 

나는 두 번째 예제가 작동한다고 생각합니다. 나는 여러 가지 방법으로 그것을 망쳐 놓으려고했습니다. 그러나 내가 뭘 잘못하고 있는지 알아낼 수 없습니다. 어쩌면 중첩 된 QoQ가 그런 식으로 작동하지 않을 수도 있습니다. 두 가지 코드없이 시도 할 수있는 또 다른 방법이 있습니까? 그냥 더 읽기 쉽고 변수를 두 번 지정할 필요가 없습니다.

_ = new Underscore();// instantiate the library  

submissions = _.groupBy(arguments.answers, 'submission_id'); 

groupBy()는 키가 그룹 요소의 값입니다 구조를 (반환

ColdFusion에서 10 라일로 4에서
+2

내가 곁에 수 없지만 * 일을 실패하여 의미를 명확히하기 위해 도움이 될 것이다. 오류가 발생하고 결과가 0이됩니다 ..? – Leigh

+0

오류. "Syntax error at"submission_id IN (SELECT submissions_id "예상 조건 [like | in | between]") blah blah – Leeish

+1

전체 오류 메시지를 게시 할 수 있습니까? –

답변

0

, 당신은 당신이 훨씬 적은 코드를 원하는 것을 달성하기 위해 Underscore.cfcgroupBy function을 활용할 수 있습니다 이 경우, submission_id).

(면책 조항 : 나는 Underscore.cfc을 썼다)

3

전분기 대비 하위 쿼리를 지원하지 않습니다. 그것은 길고 짧습니다. *

Docs

+2

Adam이 말했듯이 QoQ는 하위 쿼리를 지원하지 않지만 다음에서 사용할 수 있습니다 (#valuelist (someOtherQuery.columnName) #) – Travis

+0

오늘은 @Travis의 아이디어를 사용했습니다. 을 사용하여 값을 저장 한 다음 하위 쿼리를 부수어 내고 (#PreserveSingleQuotes (myList) #)'xxxx'를 사용합니다. – djailer

+0

@ djailer - 'PreserveSingleQuotes'가 필요합니다. 'cfqueryparam'을'list' 속성과 함께 사용하십시오. – Leigh