我有一个非常简单的DBIx :: Class模型,只有一个对象 Person 。 相关列为 id_person , id_manager ,姓名,姓氏。 人属于经理。 人可以是有许多下属的经理。
__PACKAGE__->has_many(
"subordinates",
"DBIx::Result::Person",
{ "foreign.id_manager" => "self.id_person" },
);
__PACKAGE__->belongs_to(
"manager",
"DBIx::Result::Person",
{ "foreign.id_person" => "self.id_person" },
);
我如何: 1.搜索所有用户,然后在我的结果集中添加一列“下属人数” ,该列将列出所有用户及其下属人数,包括0?
这是唯一的解决方案,然后在后处理中检查“下属”属性的长度吗?
my $rs = $schema->resultset('Person')->search(
undef,
{
prefetch => 'subordinates'
}
);
本质上类似于:
SELECT
person.*,
( SELECT
count(*)
FROM
person subordinate
WHERE
subordinate.id_manager = person.id_person
) AS subordinate_count
FROM
person
;
仅返回其下属计数高于2的经理的下属计数吗??
选择*从(
选择
人。,
( 选择
计数()
从
人下属
哪里
subordinate.id_manager = person.id_person
)AS subordinate_count
从
人
)WHERE subordinate_count> 2
;
我已经尝试过类似的方法,但是我如何获得计数?
my $rs = $schema->resultset('Person')->search(
{
select => ['me.id_person'],
group_by => ['me_id_person'],
having => \[ count('subordinates.id_person) > ?', 2]
join => 'subordinates',
}
这是我在纯SQL中想要的:
SELECT
person.*,
( SELECT
count(*)
FROM
person subordinate
WHERE
subordinate.id_manager = person.id_person
AND subordinate.name = 'Mary'
) AS subordinate_count
FROM
person
;