Здесь есть два основных решения. Сначала вы можете сделать что-то в CF с записями вне QoQ. Я уже опубликовал свое предложение по этому вопросу. Другой - все делать в БД. Один из способов сделать это - использовать подзапрос в качестве временной таблицы. Вы даже можете сохранить оператор sql в глобальной переменной, а затем ссылаться на него в тех же местах, где вы в настоящее время используете QoQ, но делаете реальный запрос к базе данных. Это может звучать медленнее, чем одна поездка в БД, а затем много QoQ, но на самом деле это, вероятно, не так, если эффективно проиндексированы.
select *
from (
#sqlstring#
) as tmp
where company = 'stackexchange'
Я фактически сделал это для системы со сложными критериями как к тем записям, к которым у пользователя должен быть доступ, так и к тому, что они могут фильтровать в этих записях. Использование этого подхода означает, что вы всегда знаете источник внутренних записей, а не пытаетесь убедиться, что каждый запрос выполняется правильно.
Edit:
На самом деле безопаснее (и, как правило, более эффективно) использовать параметры запросов, когда это возможно. Я обнаружил, что это можно сделать, включив файл оператора SQL ...
select *
from (
<cfinclude template="master_subquery.cfm" />
) as tmp
where company = 'stackexchange'