$c->stash->{routes} = [$c->model('QDB::Route')->search(
{
'n_1.net_id' => $c->stash->{net_id},
},
{
alias => 'rt', # alias columns in accordance with "from"
from => [
{ rt => 'vi_route' },
[
{ n_1 => 'vi_nodes', -join_type => 'inner' },
{
'rt.route_beg' => 'n_1.node_id',
'rt.net_id' => 'n_1.net_id'
}
],
[
{ n_2 => 'vi_nodes', -join_type => 'inner' },
{
'rt.route_end' => 'n_2.node_id',
'rt.net_id' => 'n_2.net_id'
}
],
],
'select' => [
'rt.route_beg',
'rt.route_end',
\'n_1.node_name AS node_name_beg',
\'n_2.node_name AS node_name_end',
\'COUNT(rt.route_beg) as grp_count',
],
'as' => [ qw/ route_beg route_end node_name_beg node_name_end route_grp_count / ],
'group_by' => [qw/ rt.route_beg rt.route_end node_name_beg node_name_end /],
},
)];
####
SELECT rt.route_beg,
rt.route_end,
n_1.node_name AS node_name_beg,
n_2.node_name AS node_name_end,
COUNT(rt.route_beg) as grp_count
FROM vi_route rt
INNER JOIN vi_nodes n_1
ON ( rt.net_id = n_1.net_id AND rt.route_beg = n_1.node_id )
INNER JOIN vi_nodes n_2
ON ( rt.net_id = n_2.net_id AND rt.route_end = n_2.node_id )
WHERE ( n_1.net_id = ? )
GROUP BY rt.route_beg, rt.route_end, n_1.node_name, n_2.node_name
ORDER BY node_name_beg: 'param_value'
####
page => 1, # page to return (defaults to 1)
rows => 10, # number of results per page
####
SELECT * FROM
(
SELECT TOP 10 * FROM
(
SELECT TOP 10 rt.route_beg, rt.route_end, n_1.node_name AS node_name_beg, n_2.node_name AS node_name_end, COUNT(rt.route_beg) as grp_count
FROM vi_route rt
INNER JOIN vi_nodes n_1
ON ( rt.net_id = n_1.net_id AND rt.route_beg = n_1.node_id ) INNER JOIN vi_nodes n_2
ON ( rt.net_id = n_2.net_id AND rt.route_end = n_2.node_id )
WHERE ( n_1.net_id = ? ) ORDER BY node_name_beg ASC
) AS foo
#-- There must be GROUP BY CLAUSE but it's missed! --#
ORDER BY node_name_beg DESC
) AS bar
ORDER BY node_name_beg ASC
: 'param_value'