전에 주문 방법 : 나는 DBIx :: 클래스를 사용하고나는이처럼 보이는 간단한 임시 테이블을 가지고 DBIx와 GROUP :: 클래스
Table: item_approval
item user status modified
2 fred approved 2010-12-01 00:00:00
3 fred approved 2010-12-02 00:00:00
4 fred disapproved 2010-12-03 00:00:00
7 jack unapproved 2010-12-05 00:00:00
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
4 fred disapproved 2010-12-04 00:00:00
. 내가 할 수있는 의미합니다
__PACKAGE__->has_many(
"item_approvals",
"Schema::Result::ItemApproval",
{ "foreign.item" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
: 내 "항목"결과는 정의되어 괜찮
my $item = $schema->resultset('Item')->find({id=>4});
합니다. 그럼, 할 수있다 : 어떻게 프레드와 잭의 가장 최근의 승인 상태의 집합을받을 수 있나요 :
item user status modified
4 fred disapproved 2010-12-03 00:00:00
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
4 fred disapproved 2010-12-04 00:00:00
내 질문 :
my @approvals = $item->item_approvals;
이 같은 결과 집합을 얻을? 나는이 같은 것들을 시도
item user status modified
4 fred approved 2010-12-06 00:00:00
4 jack unapproved 2010-12-07 00:00:00
: 그건 내가이 결과 집합 싶어한다
my @approvals = $item->search({}, {
group_by => 'user',
order_by => {-desc => 'modified'}
});
하지만 "BY ORDER는"은 "GROUP BY"후 을 실행을, 그래서 얻을 대신 이런 것들 :
item user status modified
4 fred disapproved 2010-12-03 00:00:00
4 jack unapproved 2010-12-07 00:00:00
도움 말?
필자는 perl이나 dbix를 모르지만, SQL 수정 방법은 사용자가 수정 한 필드를 'Modified'로 MAX를 수정하여 사용자 당 최고 날짜를 반환하는 것입니다. – JNK
나는 다음과 같은 것들을 사용하여 이것을 약간 사용 해왔다. SELECT item, user, status, MAX (수정 됨) as most_recent FROM item_approval WHERE id = 4; 사용자 당 최고 날짜 *를 반환하지 않습니다. *; 가장 높은 날짜의 단일 행을 반환합니다. –
당신은'MAX (Modified)'와'GROUP BY User' 둘 다 할 필요가 있습니다. 'GROUP'이없는'MAX'는 여러분에게 쿼리의 최대 값을줍니다. GROUP BY는 GROUP BY의 각 그룹에 대해 max (또는 SUM, AVG 등의 집계 함수)를 제공합니다. – JNK