0

在 CF 中,我正在尝试做一个 QoQ,其中行位于其他行的列表中。基本上将一些代码从 cftags 移动到 cfscript(为什么不重要)。在标签中,我们有一个主查询,我们有几个可以做一些繁重工作的嵌套。我将其移至 cfscript 并具有以下有效语法:

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 不能那样工作。有没有另一种方法可以在没有两块代码的情况下完成我正在尝试的事情?只是这样它更具可读性,我不必两次分配变量。

4

2 回答 2

3

QoQ 不支持子查询。这就是它的长处和短处。

文档

于 2012-08-30T08:49:33.957 回答
0

在 Coldfusion 10 或 Railo 4 中,您可以利用 Underscore.cfc 的groupBy函数更少的代码完成您想要的:

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

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

groupBy()返回一个结构,其中键是组元素的值(在本例中为submission_id)。

(免责声明:我写了 Underscore.cfc)

于 2012-08-30T03:19:56.363 回答