[Dbix-class] Left join with nulls

Alan Hicks ahicks at p-o.co.uk
Tue Jun 27 19:12:27 CEST 2006


Hi,

I've just started to use DBIx with Catalyst and think it's truly great 
and simplifies much of what I need to do.

Alas I have a query that I can't get my head around so any advice is 
appreciated.  I'm trying to get a list of available categories and sub 
categories for a catalogue I am looking after and have previously got 
this using the following sql:-

SELECT  c.id,
         c.name,
         sc.id,
         sc.name,
         CASE
                 WHEN cc.id IS NOT NULL THEN 1
                 ELSE 0
                 END AS cat_cat,
         CASE
                 WHEN csc.id IS NOT NULL THEN 1
                 ELSE 0
                 END AS cat_sub_cat
FROM    category c
INNER JOIN sub_category sc
ON      c.id = sc.category
LEFT JOIN catalogue_cat cc
ON      cc.cat = c.id
AND     cc.id = 2
LEFT JOIN catalogue_subcat csc
ON      csc.subcat = sc.id
AND     csc.id = 2
ORDER BY c.sort_order, sc.sort_order

My tables are as follows:-

package MyApp::Model::DBSchema::Category;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('category');
__PACKAGE__->add_columns(qw/id sort_order folder name description/);

package MyApp::Model::DBSchema::CatalogueCat;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('catalogue_cat');
__PACKAGE__->add_columns(qw/id cat/);

package MyApp::Model::DBSchema::CatalogueSubCat;
use strict;
use warnings;
use base 'DBIx::Class';
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('catalogue_subcat');
__PACKAGE__->add_columns(qw/id subcat/);

Thanks in advance,
Alan



More information about the Dbix-class mailing list