Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re^5: Problems Using Join in DBIx::Class

by 1nickt (Abbot)
on Dec 29, 2017 at 04:26 UTC ( #1206390=note: print w/replies, xml ) Need Help??

in reply to Re^4: Problems Using Join in DBIx::Class
in thread Problems Using Join in DBIx::Class

Hi, as soonix and poj have said your query appears to be wrong, or not doing what you say you want. A sent_email date of '0000-00-00', which you do not want, will match IS NOT NULL in the first conditional and thus be returned.

You cannot have a query using one column with 2 different values, unless you use an OR

That's not correct. You use an arrayref, but the first element must be a modifier, e.g. -and.

I would say you need the following rather simpler construct:

my %where = ( status => ['Offered','Denied','Cancelled','Conditional Offer'], sent_email => { '!=' => [ -and => undef, '0000-00-00' ] }, );
Demonstrated with SQL::Abstract (which is used internally by DBIx::Class):
use strict; use warnings; use feature 'say'; use Data::Dumper; use SQL::Abstract; my %where = ( status => ['Offered','Denied','Cancelled','Conditional Offer'], sent_email => { '!=' => [ -and => undef, '0000-00-00' ] }, ); my $sqla = SQL::Abstract->new; my ( $sql, @bind ) = $sqla->select( 'TblRequests', 'sent_email', \%where, undef, ); say $sql; say Dumper \@bind; __END__
SELECT sent_email FROM TblRequests WHERE ( ( ( sent_email IS NOT NULL +AND sent_email != ? ) AND ( status = ? OR status = ? OR status = ? OR + status = ? ) ) ) $VAR1 = [ '0000-00-00', 'Offered', 'Denied', 'Cancelled', 'Conditional Offer' ];

Hope this helps!

The way forward always starts with a minimal test.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1206390]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (7)
As of 2019-10-15 20:26 GMT
Find Nodes?
    Voting Booth?