fREW Schmidt wrote:
On Thu, Mar 12, 2009 at 10:23 AM, fREW Schmidt <[email protected]
<mailto:[email protected]>> wrote:
Hello friends!
We'd like to make it a method for the logParent, so one could just
do $parent->elapsed_ms or something like that. We are kindav at a
loss as to how to do this. Any tips at all would be extremely
helpful.
Actually I pasted the SQL incorrectly... here is what it should have
been:
select datediff(millisecond,
(select date from logParents where id = 62),
(select max(logstatus.date) from logstatus
join logChildren on logChildren.id = logStatus.child_id
join logParents on logParents.id = logChildren.parent_id
where parent_id = 62)
) as elapsed
If it was expressed without subselects...
select datediff(millisecond, lp.date, max(ls.date)) as elapsed
from logParents
left outer join logstatus ls on (lp.id = ls.parent_id)
left outer join logChildren lc on (lc.parent_id = lp.id)
where lp.id = 62
group by ls.id
I think that makes it more clear. Given the proper relationships set up
couldn't that just be something like...
sub elapsed_ms {
my $self = shift;
my $id = shift;
$self->search(
{ me.id => $id },
{ +select => [ \"datediff(millisecond, logparents.date, logstatus.date)" ]
, +as => [ elapsed ]
, prefetch => [ 'logstatus', 'logchildren' ]
, order_by => 'logstatus.date desc'
})->first->get_column->('elapsed');
}
Though the order_by is less efficient than the group by, I'm sure.
David
_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]