Я пытаюсь «перевести» этот запрос в оператор fluentPDO, но не могу найти способ использовать подзапросы с ним
SELECT plan.*, COUNT(DISTINCT click.id) AS clicks, COUNT(DISTINCT impression.id) as impressions, IFNULL(A.earnings, 0) AS earnings FROM plan
LEFT JOIN click ON click.plan_id = plan.id
LEFT JOIN impression ON impression.plan_id = plan.id
LEFT JOIN (
SELECT plan_id AS earnings_id, SUM(signup.earning) as earnings FROM signup
) A ON A.earnings_id = plan.id
GROUP BY plan.id
Любая помощь?
Я не знаю более хорошего способа, чем просто поместить ваш необработанный SQL-запрос в метод leftJoin:
$fluent->from('plan')
->select('COUNT(DISTINCT click.id) AS clicks, COUNT(DISTINCT impression.id) as impressions, IFNULL(A.earnings, 0) AS earnings')
->leftJoin('click ON click.plan_id = plan.id')
->leftJoin('impression ON impression.plan_id = plan.id')
->leftJoin('(SELECT plan_id AS earnings_id, SUM(signup.earning) as earnings FROM signup) A ON A.earnings_id = plan.id')
->groupBy('plan.id');
я нахожу Руководство FluentPDO SitePoints довольно полезно, но они не упоминают подзапросы. Они также предполагают, что вам не нужно явно щелкать левой кнопкой мыши по объединению, чтобы планировать, а показывать по плану, но на практике я никогда не могу сказать, каким образом FluentPDO будет определять отношения между двумя таблицами.
Других решений пока нет …