我正在尝试在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) )
)
)
);
任何想法?
答案 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时,它有助于我缩进它们,然后可以逐行检查它们。