Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос на выборку из нескольких таблиц с сортировк 
:(
    Опции темы
zebulun
Дата 3.4.2013, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.9.2011

Репутация: нет
Всего: нет



Код

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.
PM MAIL   Вверх
skyboy
Дата 3.4.2013, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



1. используй left join.
2. не используй подзапрос — используй группировку(group by)
PM MAIL   Вверх
zebulun
Дата 3.4.2013, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 1.9.2011

Репутация: нет
Всего: нет



Код

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;

Правильно я вас понял?
PM MAIL   Вверх
skyboy
Дата 3.4.2013, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



не совсем. proj_sets в оригинальном запросе присоединялся по inner join, а теперь получается left join — расточительнее
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.