我需要运行一个返回符合用户年龄要求的产品的查询。为数据库中的产品分配适用的最小和最大年龄(min_age& max_age)。用户将选择他们想要搜索的年龄范围(为了这个问题,我们称之为userMinAge& userMaxAge)。
由于我想要返回任何产品,其中在用户选择的年龄范围和产品存储的年龄范围之间存在一些交叉,我认为这需要满足以下不等式中的一个 -
userMinAge< = min_age< = userMaxAge OR
userMinAge< = max_age< = userMaxAge
我正在尝试使用Yii的CDbCriteria来运行它并提出以下内容 -
$criteria->condition = "$minAge <= min_age <= $maxAge OR $minAge <= max_age <= $maxAge";
这样运行正常(因为没有抛出错误),但不排除它应该的产品。即当用户选择年龄20-35岁时,包括年龄范围为8-19岁的产品。有些事情是错的,但我对CDbCriteria的相当平均的理解让我感到困惑。
有谁能发现为什么这种方法不起作用?我使用CDbCriteria有什么错误吗?
非常感谢,
鹅
答案 0 :(得分:2)
$criteria->condition = "($minAge <= min_age <= $maxAge) OR ($minAge <= max_age <= $maxAge)";
$criteria->condition = "(min_age BETWEEN $minAge AND $maxAge) OR(max_age BETWEEN $minAge AND $maxAge)";
如果这不能解决您的问题,请提及您的数据库架构, 然后很容易说出错了......