Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > запрос на выборку из нескольких таблиц с сортировк


Автор: zebulun 3.4.2013, 16:27
Код

SELECT `projects`.*, (SELECT COUNT(`elements`.`id`) FROM `elements` WHERE `elements`.`set_id`=`proj_sets`.`set_id`) AS `els`
        FROM `projects` JOIN `proj_sets` ON `proj_sets`.`pr_id`=`projects`.`id` ORDER BY `'.$sort.'` '.$dir;


есть такой запрос,необходимо иметь возможность сортировки по всем данным, он работает(т.е. сортирует) но выборка не полная т.к. существуют проекты из таблицы projects, которым нет соответствия в таблице proj_sets, что приводит к неполным результатам, надо чтобы такие проекты (без соответствия) получали значение els=0.

Автор: skyboy 3.4.2013, 17:12
1. используй left join.
2. не используй подзапрос — используй группировку(group by)

Автор: zebulun 3.4.2013, 17:56
Код

SELECT `projects`.*, COUNT(`elements`.`id`)  AS `els`
FROM `projects` 
LEFT JOIN `proj_sets` ON `proj_sets`.`pr_id`=`projects`.`id` 
LEFT JOIN  `elements`  ON `elements`.`set_id`=`proj_sets`.`set_id`
GROUP BY `id`
ORDER BY `els` DESC;

Правильно я вас понял?

Автор: skyboy 3.4.2013, 20:50
не совсем. proj_sets в оригинальном запросе присоединялся по inner join, а теперь получается left join — расточительнее

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)