findAll with OR, AND, and BETWEEN

2008-01-29 Thread brandags

Hello,

I'm trying to generate a query with the following condition:

WHERE Lead.user_id = $user_id
OR (Lead.time_found BETWEEN '$start_time' AND '$end_time' AND
Lead.user_id IN ('0',NULL))


Here is the condition I'm using, but it's not giving the right result.

$conditions[] = array('Lead.user_id'=$user_id
'or'=array(
'Lead.time_found'=' 
'.$this-Session-read('User.start_time'),
'Lead.time_found'=' 
'.$this-Session-read('User.end_time'),
'Lead.user_id'=array('0',NULL)
)
);

Here is what I'm getting back:
WHERE (`Lead`.`user_id` = 3) AND (((`Lead`.`time_found`  '09:00:00')
OR (`Lead`.`user_id` IN ('0', NULL) )))

It's leaving out the first start time, and switching some of the AND's
and OR's.
What am I doing wrong?

I've also tried just using BETWEEN '$value' in my query, but it ends
up putting slashes in front of the apostrophes in the sql query which
makes it invalid (ie. BETWEEN \'2008-01-01\' AND \'2008-02-01\')

Any ideas?
Thank you!
Brandon

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Cake 
PHP group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---



Re: findAll with OR, AND, and BETWEEN

2008-01-29 Thread JP

Hi,

if you want a statement like
A OR (B AND C AND D)
you can do this:

$conditions = array(
'OR' =
array(
A,
array(B, C, D)
)
);

Read: Apply operator OR to the following arguments A plus
array(B,C,D). The second argument to the OR operator expands further
to an AND statement (AND operator with 3 arguments B,C,D).

Note that the AND for B, C, D is implicit. So you could also write:

$conditions = array(
'OR' =
array(
A,
array(
'AND' =

array(B, C, D)
)
)
);

You may want to take another look at the manual here
http://manual.cakephp.org/chapter/models
regarding complex find conditions.

The idea behind this is to supply conditions in polish / prefix
notation where the operator precedes the arguments, to facilitate tree-
like representation.
http://en.wikipedia.org/wiki/Polish_notation

Best,
jp

On 30 Jan., 05:43, brandags [EMAIL PROTECTED] wrote:
 Hello,

 I'm trying to generate a query with the following condition:

 WHERE Lead.user_id = $user_id
 OR (Lead.time_found BETWEEN '$start_time' AND '$end_time' AND
 Lead.user_id IN ('0',NULL))

 Here is the condition I'm using, but it's not giving the right result.

 $conditions[] = array('Lead.user_id'=$user_id
 'or'=array(
 'Lead.time_found'=' 
 '.$this-Session-read('User.start_time'),
 'Lead.time_found'=' 
 '.$this-Session-read('User.end_time'),
 'Lead.user_id'=array('0',NULL)
 )
 );

 Here is what I'm getting back:
 WHERE (`Lead`.`user_id` = 3) AND (((`Lead`.`time_found`  '09:00:00')
 OR (`Lead`.`user_id` IN ('0', NULL) )))

 It's leaving out the first start time, and switching some of the AND's
 and OR's.
 What am I doing wrong?

 I've also tried just using BETWEEN '$value' in my query, but it ends
 up putting slashes in front of the apostrophes in the sql query which
 makes it invalid (ie. BETWEEN \'2008-01-01\' AND \'2008-02-01\')

 Any ideas?
 Thank you!
 Brandon
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups Cake 
PHP group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~--~~~~--~~--~--~---