在CF中,我正在尝试做一个QoQ,其中行在其他行的列表中。基本上,将一些代码从cftag移动到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不是这样工作的。有没有其他方法可以在没有两个代码块的情况下完成我正在尝试的事情?只是为了让它更具可读性,而且我不需要两次赋值变量。
发布于 2012-08-30 16:49:34
QoQ不支持子查询。这就是它的长处和短处。
Docs
发布于 2012-08-30 11:19:56
在Coldfusion 10或Railo4中,您可以利用Underscore.cfc的groupBy function以更少的代码实现您想要的功能:
_ = new Underscore();// instantiate the library
submissions = _.groupBy(arguments.answers, 'submission_id');groupBy()返回一个结构,其中键是组元素的值(在本例中为submission_id)。
(免责声明:我写了Underscore.cfc)
https://stackoverflow.com/questions/12187486
复制相似问题