在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不能那样工作。有没有其他方法可以在没有两个代码的情况下完成我正在尝试的内容?这样它更具可读性,我不必两次分配变量。
答案 0 :(得分:3)
QoQ不支持子查询。这就是它的长短。
答案 1 :(得分:0)
在Coldfusion 10或Railo 4中,您可以利用groupBy function的Underscore.cfc以更少的代码完成您想要的任务:
_ = new Underscore();// instantiate the library
submissions = _.groupBy(arguments.answers, 'submission_id');
groupBy()
返回一个结构,其中键是group元素的值(在本例中为submission_id
)。
(免责声明:我写过Underscore.cfc)