package Bookmarks::M::DB::Tags; use strict; __PACKAGE__->has_many( links => ['Bookmarks::M::DB::LinksTags' => 'link'] ); __PACKAGE__->set_sql('related_tags', <<'END_SQL'); SELECT DISTINCT tags.pk FROM tags, links_tags lt1, links_tags lt2 WHERE tags.pk = lt1.tag AND lt1.link = lt2.link AND lt2.tag = ? AND lt1.tag != lt2.tag END_SQL __PACKAGE__->set_sql('popularity', <<'END_SQL'); SELECT tags.pk, COUNT(links_tags.link) AS how_many FROM tags, links_tags WHERE tags.pk = links_tags.tag GROUP BY links_tags.tag ORDER BY how_many DESC END_SQL __PACKAGE__->columns(TEMP=> 'how_wany'); sub count_links { my ($self)=@_; return scalar $self->links(); } sub related_tags { my ($self)=@_; return $self->search_related_tags($self->pk()); } sub get_all_tags_by_popularity { return $_[0]->search_popularity(); } sub ordered_links { my ($self)=@_; my @links=$self->links(); return sort { ($b->access_count || 0) <=> ($a->access_count || 0) } @links; } =head1 NAME Bookmarks::M::DB::Tags - CDBI Model Component Table Class =head1 SYNOPSIS Very simple to use =head1 DESCRIPTION Very nice component. =head1 AUTHOR Clever guy =head1 LICENSE This library is free software . You can redistribute it and/or modify it under the same terms as perl itself. =cut 1;