Coldfusion: ВЫБРАТЬ ИЗ QoQ, ГДЕ X в (ВЫБРАТЬ Y ИЗ QoQ) не работает
В 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 не работает так. Есть ли другой способ сделать то, что я пытаюсь, без двух частей кода? Просто так, что это более читабельно, и мне не нужно назначать переменные дважды.
2 ответа
QoQ не поддерживает подзапросы. Это длинное и короткое из этого.
В Coldfusion 10 или Railo 4 вы можете использовать функцию groupBy из Underscore.cfc, чтобы выполнить то, что вы хотите, в гораздо меньшем количестве кода:
_ = new Underscore();// instantiate the library
submissions = _.groupBy(arguments.answers, 'submission_id');
groupBy()
возвращает структуру, ключами которой являются значения элемента группы (в этом случае submission_id
).
(Отказ от ответственности: я написал Underscore.cfc)