2013-05-17 2 views
1

У меня есть две таблицы MySQL людей и собак:DBIx :: Класс: Подсчет записей с определенными значениями в связанной таблице

TABLE humans: 
id int, name varchar(32) 
TABLE dogs 
id int, human int, dead int 

Каждый человек может иметь ноль или более собак. Если собака мертва, то для целых мертвых установлено значение «1». Теперь я хочу рассчитать всех людей, у которых была мертвая собака.

В SQL это может быть сделано с:

SELECT COUNT(*) FROM humans WHERE 
    (SELECT count(*) FROM dogs WHERE humans.id = dogs.human AND dead = 1) > 0 

Как я могу реализовать это с Перлз большой DBIx :: Class?

ответ

0

Решение этой проблемы с помощью подзапроса сложно, потому что SQL::Abstract (который используется DBIx :: Class для построения запросов) предполагает, что вы всегда имеете имена столбцов в элементах ваших предложений WHERE. Вам, вероятно, придется обратиться к буквальному SQL:

my $count = $schema->resultset('Humans')->count(
    \[ '(SELECT COUNT(*) FROM dogs WHERE human = me.id AND dead = 1) > 0' ] 
);