У меня есть две таблицы services
и service_requests
. service_requests
стол имеет внешний ключ service_id
ссылка services
таблица.CakePHP 3: выберите данные из нескольких таблиц
я должен выбрать данные из services
и service_requests
где services.id = service_requests.service_id
ORDER BY COUNT(service_requests.service_id) DESC
Это то, что я делаю в моем контроллере
$servicesTable = TableRegistry::get('services');
$featuredServices = $servicesTable->find('all')
->select(['ServiceRequests.service_id', 'count' => 'COUNT(ServiceRequests.service_id)'])
->select($servicesTable)
->join([
'table' => 'service_requests',
'alias' => 'ServiceRequests',
'conditions' => ['Services.id' => 'ServiceRequests.service_id'],
])
->group('service_id')
->order(['Count' => 'DESC'])
->limit(10);
$this->set('featuredServices', $featuredServices);
и печати в целях, как
if (!empty($featuredServices)):
foreach($featuredServices as $service):
echo $service->title;
endforeach;
endif;
Но это не работает. Также печать echo $featuredServices;
только печатает строку sql SELECT.......
. Обе таблицы не связаны с контроллером, я использую в.
EDIT 2
Я хочу запрос, как этот
SELECT ServiceRequests.service_id AS `ServiceRequests__service_id`, COUNT(ServiceRequests.service_id) AS `count`, Services.id AS `Services__id`, Services.service_category_id AS `Services__service_category_id`, Services.title AS `Services__title`, Services.description AS `Services__description` FROM services Services INNER JOIN service_requests ServiceRequests ON Services.id = ServiceRequests.service_id GROUP BY service_id ORDER BY Count DESC LIMIT 10
Этот SQL запрос работает нормально при работе в phpMyAdmin
и этот запрос генерируется по debug($featuredServices)
из
$featuredServices = $servicesTable->find('all')
->select(['ServiceRequests.service_id', 'count' => 'COUNT(ServiceRequests.service_id)'])
->select($servicesTable)
->join([
'table' => 'service_requests',
'alias' => 'ServiceRequests',
'conditions' => ['Services.id' => 'ServiceRequests.service_id'],
])
->group('service_id')
->order(['Count' => 'DESC'])
->limit(10);
Это только генерировать SQL запрос на отладку. Как я могу выполнить это, чтобы получить результат вместо sql-запроса.
Мне нужно сгруппировать результат с помощью 'ServiceRequests.service_id' и сортировать по' COUNT (ServiceRequests.service_id) DESC', но это не работает при добавлении 'group()', а также ahve для выбора только тех 'сервисов' которые находятся в 'service_requests' –
попробуйте этот код: $ query = $ this-> Services-> find ('all', array ('содержать' => array ('Requests'))) \t \t -> group (' Requests.service_id ') \t \t -> заказ (массив (' Requests.service_id '=>' DESC ')) \t \t -> предел (2); – pradeep
это дает ошибку как 'Ошибка: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'Requests.service_id' в 'group statement'' ** SQL CODE **:' SELECT Services.id AS' Services__id ', Services. service_category_id AS 'Services__service_category_id', Services.title AS 'Services__title', Services.description AS 'Services__description', Services.created AS 'Services__created' FROM services Services GROUP BY Requests.service_id ORDER BY Requests.service_id DESC LIMIT 2' –