Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dbic + left outer join, использование dbix class с left outer jo 
:(
    Опции темы
andzol
Дата 15.6.2011, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



здравствуйте всем.

есть следующая задача

table A (id)
table B(id)
table A_B(idA NOT NULL ,idB NOT NULL)

требуется сделать запрос средствами dbic следующего типа

select * from B LEFT OUTER JOIN A_B AS ab ON ab.idB=B.id AND ab.idA=? WHERE ab.idB IS NULL; , [BIND => 123]

т.е. выбрать из В все id, которых нет в множестве А_В для конкретного id из множества А

поковыряв dbic::relationship очевидного решения не нашел, поэтому дабы не сломать голову окончательно решил пока остановиться на следующем решении
делаем M:M A<->B = А_В


над множеством A_B делаю dbic::resultsource::view (is_virtual=1 естественно) с указанным выше запросом

т.о. для получения объекта из множества B мне надо будет сделать примерно следующее

X=resultset('virtual_view_A_B')->search({},{bind=>[123]})->first;
X->id - это ИД из множества В, которых нет в множестве А_В для элемента 123 из множества А, и теперь по этому ИД можно получить объект:
Bobj=resultset('B')->find(X->id);



вопрос:

как можно переделать вышеизложенное, чтобы на выходе получить примерно следующее:
Bobj=resultset('какая-то хитрая конструкция?_A_B')->find({idA=>123});

т.е. вместо 2х запросов делать 1,  но хитрый.
нужно ли это делать в общем случае и оптимально ли мое решение в данном(выше) случае?

спасибо


Это сообщение отредактировал(а) andzol - 15.6.2011, 22:30
PM MAIL   Вверх
EcSYZ
Дата 16.6.2011, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Точно сказать не могу, ибо Join`ы в DBIX::Class штука весьма продуманная, но что то вроде этого должно работать:
Код

$DBIx->resultset('B')->search({
   'A_B.idA' => 123,
   'A_B.idB' => { 'IS' =>undef }
},
{
   'join'    => [qw/A_B/],
   'select' => ['me.id'],
   'as'      => ['id']
});


Это сообщение отредактировал(а) EcSYZ - 16.6.2011, 16:23
PM MAIL WWW   Вверх
andzol
Дата 16.6.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо за идею. обязательно попробую и посмотрю на бенчмарки заодно....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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