我有这个查询,我想用CDBCriteria写它。可以用CDBCriteria写吗?我不知道如何在Yii框架中使用CDBcriteria编写此查询。
感谢您的时间。
$opt='';
if(!empty($roomtype))
{
$opt .= " AND id_room_type = ".$roomtype;
}
if(empty($children))
{
$opt .= " AND c.childrenFriendly = 1 ";
$capacity = $adults + $children;
}
else {
$capacity = $adults;
}
if(!empty($seaview))
{
$opt .= " AND c.seaview = 1 ";
}
if(!empty($smoking))
{
$opt .= " AND c.smoking = 1 ";
}
if(!empty($king_beds))
{
$opt .= " AND c.king_beds >= 1 ";
}
$qry = RoomType::model()->findAllBySql("
SELECT (number_of_rooms) AS total, id_room_type, c.reservation, c.start, c.end, childrenFriendly, smoking, king_beds, capacity,
SUM( number_of_rooms - IFNULL( c.reservation, 0 ) ) AS result
FROM room_type
LEFT JOIN (
SELECT fk_room_type, COUNT( fk_room_type ) AS reservation, start ,end
FROM room_type_reservation
WHERE
(end > '".$start->asSql()."' AND start < '".$end->asSql()."') OR
(start < '".$end->asSql()."' AND end < '".$start->asSql()."')
GROUP BY fk_room_type
)c ON id_room_type = fk_room_type
WHERE enabled = 1 AND capacity > ".$capacity." ". $opt ."
GROUP BY id_room_type
HAVING result > ".$number_of_rooms."
");
return $qry;
答案 0 :(得分:0)
当您阅读laser_wizard引用的文档时,请特别注意命名范围。在编程中,它们不是你想象范围的范围。相反,它们是一种向where子句添加预定义表达式的方法。您可能还想考虑在SQL中使用参数标记而不是变量名。这样做有助于保护您免受SQL注入。