[CDBI] order by a foreign key

Marcello m.romani at spinsoft.it
Tue Aug 16 17:44:36 BST 2005


Randal L. Schwartz ha scritto:
>>>>>>"Marcello" == Marcello  <m.romani at spinsoft.it> writes:
> 
> 
> Marcello> I have two tables, 'cd' and 'artist', whose model classes are
> Marcello> MyApp::Cd and MyApp::Artist.
> 
> Marcello> MyApp::Artist is stringified as 'name'
> 
> Marcello> The relationship is:
> Marcello> MyApp:Cd->has_a( artist => MyApp::Artist );
> 
> Marcello> MyApp::Cd uses Class::DBI::Plugin::RetrieveAll, so I can say:
> Marcello> my @cds = MyApp::Cd->retrieve_all_sorted_by( $order ); # e.g. title ASC
> 
> Marcello> And now to the point:
> Marcello> if $order == 'artist' the @cds list gets ordered by the artist *id*,
> Marcello> not by the artist name.
> 
> Marcello> What I would like to obtain is a list ordered by the foreign class's
> Marcello> 'stringify' column.
> 
> Dunno how to do it with that plugin, but using this little trick
> I came across one day...
> 
> my @ordered_cds = map $_->[0],
>   sort { $a->[1] cmp $b->[1] }
>   map [$_, $_->artist->stringify], MyApp::Cd->retrive_all;
> 

Nice!

It remainds me of a very good article of yours about sorting data in Perl...

But the problem with this technique is that we do in the application 
what is better done by the database: sorting records...

Nonetheless, seeing a problem from different perspectives is a Good Thing :)

Marcello

Marcello




More information about the ClassDBI mailing list