В общем, есть sql код, генерируемый AR,(не я его писал). Нужно вставить условие
WHERE `user`.`id` IN (SELECT `user_id` from `appointment`)
В код:
SELECT * FROM
(SELECT appointment.project_id as project_id, user.id as user_id,
GROUP_CONCAT(IF(ts.date = '2017-03-01', ts.hours, null)) AS '2017-03-01',
GROUP_CONCAT(IF(ts.date = '2017-03-02', ts.hours, null)) AS '2017-03-02',
GROUP_CONCAT(IF(ts.date = '2017-03-03', ts.hours, null)) AS '2017-03-03',
GROUP_CONCAT(IF(ts.date = '2017-03-04', ts.hours, null)) AS '2017-03-04',
GROUP_CONCAT(IF(ts.date = '2017-03-05', ts.hours, null)) AS '2017-03-05',
GROUP_CONCAT(IF(ts.date = '2017-03-06', ts.hours, null)) AS '2017-03-06',
GROUP_CONCAT(IF(ts.date = '2017-03-07', ts.hours, null)) AS '2017-03-07',
GROUP_CONCAT(IF(ts.date = '2017-03-08', ts.hours, null)) AS '2017-03-08',
(IF(ts.date = '2017-03-09', ts.hours, null)) AS '2017-03-09',
GROUP_CONCAT(IF(ts.date = '2017-03-10', ts.hours, null)) AS '2017-03-10',
GROUP_CONCAT(IF(ts.date = '2017-03-11', ts.hours, null)) AS '2017-03-11',
GROUP_CONCAT(IF(ts.date = '2017-03-12', ts.hours, null)) AS '2017-03-12',
(IF(ts.date = '2017-03-13', ts.hours, null)) AS '2017-03-13',
GROUP_CONCAT(IF(ts.date = '2017-03-14', ts.hours, null)) AS '2017-03-14',
GROUP_CONCAT(IF(ts.date = '2017-03-15', ts.hours, null)) AS '2017-03-15',
GROUP_CONCAT(IF(ts.date = '2017-03-16', ts.hours, null)) AS '2017-03-16',
(IF(ts.date = '2017-03-17', ts.hours, null)) AS '2017-03-17',
GROUP_CONCAT(IF(ts.date = '2017-03-18', ts.hours, null)) AS '2017-03-18',
(IF(ts.date = '2017-03-19', ts.hours, null)) AS '2017-03-19',
GROUP_CONCAT(IF(ts.date = '2017-03-20', ts.hours, null)) AS '2017-03-20',
GROUP_CONCAT(IF(ts.date = '2017-03-21', ts.hours, null)) AS '2017-03-21',
GROUP_CONCAT(IF(ts.date = '2017-03-22', ts.hours, null)) AS '2017-03-22',
(IF(ts.date = '2017-03-23', ts.hours, null)) AS '2017-03-23',
GROUP_CONCAT(IF(ts.date = '2017-03-24', ts.hours, null)) AS '2017-03-24',
GROUP_CONCAT(IF(ts.date = '2017-03-25', ts.hours, null)) AS '2017-03-25',
GROUP_CONCAT(IF(ts.date = '2017-03-26', ts.hours, null)) AS '2017-03-26',
GROUP_CONCAT(IF(ts.date = '2017-03-27', ts.hours, null)) AS '2017-03-27',
GROUP_CONCAT(IF(ts.date = '2017-03-28', ts.hours, null)) AS '2017-03-28',
GROUP_CONCAT(IF(ts.date = '2017-03-29', ts.hours, null)) AS '2017-03-29',
GROUP_CONCAT(IF(ts.date = '2017-03-30', ts.hours, null)) AS '2017-03-30',
GROUP_CONCAT(IF(ts.date = '2017-03-31', ts.hours, null)) AS '2017-03-31',
COUNT(IF(ts.date BETWEEN '2017-03-01' AND '2017-03-31', IF(ts.hours = 0, NULL, ts.hours), NULL)) AS 'total_days' FROM `user`
LEFT JOIN `timesheet` `ts` ON ts.user_id = user.id
LEFT JOIN (SELECT `appointment`.`user_id`, `appointment`.`project_id` FROM `appointment` ORDER BY `timestamp` DESC) `appointment` ON `appointment`.`user_id`=user.id
GROUP BY `user`.`id`
) `c`
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости