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]

Reply via email to