PHP MongoDB嵌套$或和$和

时间:2016-07-19 14:30:40

标签: php mysql mongodb

我正在尝试在MongoDb中获取以下查询的mysql等效。

MySQL = select * from db_name where ('checkin_date' >=$checkin && 'checkout_date' <= $checkin) or ('checkin_date' >=$checkout && 'checkout_date' <= $checkout)

以下是当前的代码..但是我无法让它工作。数据和变量是正确的。我尝试使用单$和$或者它们似乎完美无缺。但是在嵌套OR和AND

时我感到困惑
  $cond = array(
               '$or' => array(
                  '$and' => array(
                    array( 'checkin_date' =>  array('$gte'=>$checkin) ),
                    array( 'checkout_date' =>  array('$lte'=>$checkout) )
                  ), 
                  '$and' => array(
                      array( 'checkin_date' =>  array('$gte'=>$checkin) ),
                      array( 'checkout_date' =>  array('$lte'=>$checkout) )
                  )
                )
            );

任何想法?

1 个答案:

答案 0 :(得分:0)

根据您的示例,出现错误:

select * from db_name 
where  (
    'checkin_date' >= $checkin 
    && 'checkout_date' <= $checkin
) or (
    'checkin_date' >= $checkout  
    && 'checkout_date' <= $checkout
)

因此,第一个和第二次$ checkin,而下一个有两次$ checkout。 但是您的$ cond var确实使用1 $ checkin和1 $ checkout。根据您的mysql示例,它应该是以下内容:

 $cond = array(
               '$or' => array(
                  '$and' => array(
                    array( 'checkin_date' =>  array('$gte'=>$checkin) ),
                    array( 'checkout_date' =>  array('$lte'=>$checkin) ) // $checkin
                  ), 
                  '$and' => array(
                      array( 'checkin_date' =>  array('$gte'=>$checkout) ), // $checkout
                      array( 'checkout_date' =>  array('$lte'=>$checkout) )
                  )
                )
            );

在处理此类嵌套SQL时,它有助于我缩进它们,然后可以逐行检查它们。